(2006.12.19作成; 2007.6.17新規公開。)
私は普段、Ruby on Rails (RoR) ではPostgreSQLかMySQLをデータベース (RDBMS) として使っていますが、Oracle内のデータにアクセスする必要があったので、その手順を簡単にまとめてみました。
ちょっとアクセスするだけなので、Windows (Cygwin) でRailsを動かし、別の機械で動くOracle 9i Release 2 (9.2) サーバにアクセスできるようにします。パフォーマンスについては考えません。
まずはOracle Databaseにアクセスするためのネイティブライブラリをインストールします。Oracleのサイトはだだっ広くて探しにくいですが、Instant Clientを入れればいいでしょう。
いずれもダウンロードにはユーザ登録が必要。パッケージはBasicとSDKの二つで足りる。
次はRubyバインディングです。
Windows用のバイナリ版も用意されていますが、今回はCygwinなので、自分でコンパイルします。
Ruby/OCIのREADMEに沿ってコンパイル、インストールすれば大丈夫です。
$ ruby setup.rb config -- --with-instant-client=/opt/instantclient_10_2 $ make $ su # make install
setup.rb configの直後の--は誤りではありません。書き間違いかと思って省略するとエラーになります。(なりました。)
(2007.8.23 追記。)
TNSNAMES.ORA ファイルを作成し、所定の場所に置きます。このファイルでデータベースサーバのIPアドレス、ポートを指定します。
あとは、railsアプリケーションのconfig/database.ymlで、次のように設定すればOK。
development: adapter: oracle database: hogehoge username: hogehoge password: hogehoge
TNSNAMES.ORA ファイルを使わないときは、databaseオプションに「ホスト名 or IPアドレス/データベース名」と書きます。例えば、
database: 192.168.11.11/oracleexample
(2007.8.23 追記。)
クライアントの文字コードは、環境変数 NLS_LANG で設定します。設定した文字コードと違うと文字化けが起こります。私は最初、WindowsだとクライアントはシフトJIS決め打ちかと思っていました。
例えば、Linuxでクライアントの文字コードをUTF8にするには、次のようにします。
$ export NLS_LANG=japanese_japan.al32utf8
Netsphere Laboratories http://www.nslabs.jp/
[PR]