Ruby on RailsでOracleにtnsnames.oraを使用して接続する
tnsnames.oraを使わないで接続する方法の反対で、tnsnames.oraを使って外部DBサーバに接続する方法。インスタントクライアントを使用するのでタダ。
実行環境
OS | CentOS 5.4 |
Shell | bash |
Oracle関連ソフト | 無償のパッケージのみを使用する |
接続先DBサーバ | 自サーバ以外で稼働している |
インストール済み | Ruby, Ruby on Rails |
rubygems | activerecord-oracle_enhanced-adapter, ruby-oci8 |
環境構築手順
Instant Clientのダウンロードより、該当するパッケージをダウンロードし、インストールを行う。
$ wget http://download.oracle.com/otn/linux/instantclient/112010/oracle-instantclient11.2-basic-11.2.0.1.0-1.i386.rpm $ wget http://download.oracle.com/otn/linux/instantclient/112010/oracle-instantclient11.2-devel-11.2.0.1.0-1.i386.rpm $ sudo rpm -ivh oracle-instantclient11.2-basic-11.2.0.1.0-1.i386.rpm $ sudo rpm -ivh oracle-instantclient11.2-devel-11.2.0.1.0-1.i386.rpm
.bashrcの末尾に以下の環境変数を追加する。
export ORACLE_HOME=/usr/lib/oracle/10.2.0.4/client export PATH=${ORACLE_HOME}/bin:${PATH} export LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${ORACLE_HOME}
環境変数を反映し、gemをインストールする。
$ source ~/.bashrc $ gem install activerecord-oracle_enhanced-adapter -v=1.2.3 $ gem install ruby-oci8 -v=1.0.7
無料のインスタントクライアントだと、何故かtnsnames.oraを設置する場所が無いので作成する。
$ mkdir -p ${ORACLE_HOME}/network/admin $ cp ~/tnsnames.ora ${ORACLE_HOME}/network/admin/ # ここにtnsnames.oraをコピー
以上でRoRからOracleに接続出来るようになります。ちなみにdatabase.ymlの設定はこちら。database:の部分を「IPアドレスorホスト名/サービス名」のようなフォーマットで書くと、tnsnames.oraがいらなくなります。
development: adapter: oracle_enhanced database: スキーマ名 username: hogehoge password: hogehoge