« Mac de Ruby on Rails - #2 - Oracleと遊ぶ #1 | トップページ | Mac de Ruby on Rails - #4 - Oracleと遊ぶ #3 »

2008年2月24日 (日)

Mac de Ruby on Rails - #3 - Oracleと遊ぶ #2

さて、前回予告した通り、MacOSXのRuby on Rails 2.0.2からOracle11g R1 EE 11.1.0.6.0 for Linux x86Oracle Instant Client 10g R1 for MacOSX(PPC)を利用し、そこそこ遊べる環境を作ってみる。



バックナンバー:
Mac de Ruby on Rails - #1
Mac de Ruby on Rails - #2 - Oracleと遊ぶ #1


2008/2/26追記-文字エンコーディングに関する情報を書き忘れていたので追記
Oracle DB character set : Japanese_Japan.AL32UTF8
Oracle Client NLS_LANG : Japanese_Japan.AL32UTF8
ということで全てUTF-8で統一してあります。


まずは、Ruby on Railsの開発環境にするPowerBook G4の情報から

H/W: Apple PowerBook G4 1Ghz / RAM:1GB
OS : MacOSX 10.4.11 Tiger (XCode 2.4.1インストール済み)
Oracle Instant Client : Oracle Instant Client 10g R1 for MacOSX(PPC)
Ruby : 1.8.6 (2007-09-23 patchlevel 110) [powerpc-darwin8.11.0]
RubyGems : 1.0.1
Ruby on Rails : 2.0.2
ruby-oci8 : 1.0.0
MacOSX 10.4.11 TigerへのRuby on Rails 2.0.2のインストールはこちら。

そして、Ruby on Railsから接続するOracleデータベースサーバは(サーバっていうと大げさ過ぎるノートPCですが・・・・)

H/W: Dynabook SS SX/210LNLW (RAM:768MB)
OS : CentOS 5
DB : Oracle11g R1 EE 11.1.0.6.0 for Linux x86

という構成です。配置はこんな感じ

Ruby on Rails 2.0.2からOracle11g R1 EE 11.1.0.6.0 for Linux x86へ接続するためのOracle Instant Client 10g R1 for MacOSX(PPC)関連の環境変数の設定は以下のようになっている。
(MySQLやGlassFish関連の環境変数も見えるが今回の内容には一切関係ないので気にしないでくださいませ。)

尚、Oracle Instant Client 10g R1 for MacOSX(PPC)をMacOSX 10.4.11 Tigerへインストールする例は以前の記事を参考にしてみてください。

pb17:˜ discus$ cat .bash_profile
export PATH=/usr/local/mysql/bin:$PATH

alias mysql='mysql --set autocommit=0'

# for GlassFish
export GLASSFISH_HOME=˜/glassfish/glassfish
export PATH=/opt/local/bin:$PATH:$GLASSFISH_HOME/bin

. .bashrc
pb17:˜ discus$ cat .bashrc
alias ll='ls -lv'

ORACLE_INSTANT_CLIENT_HOME=/Users/Shared/instantclient10_1
export ORACLE_HOME=$ORACLE_INSTANT_CLIENT_HOME
export NLS_LANG=Japanese_Japan.AL32UTF8
export DYLD_LIBRARY_PATH=$ORACLE_HOME
export PATH=$ORACLE_HOME:$PATH
export TNS_ADMIN=$ORACLE_HOME


pb17:˜ discus$
pb17:˜ discus$ ls -l $ORACLE_HOME
total 182200
-r--r--r-- 1 discus orauser 21299 Apr 29 2004 README_IC.htm
-r--r--r-- 1 discus orauser 1461081 Jul 5 2004 classes12.jar
-r--r--r-- 1 discus orauser 1353 Oct 9 2003 glogin.sql
lrwxr-xr-x 1 discus orauser 20 Feb 16 12:43 libclntsh.dylib -> libclntsh.dylib.10.1
-rwxr-xr-x 1 discus orauser 14891264 Dec 13 2004 libclntsh.dylib.10.1
-rwxr-xr-x 1 discus orauser 27432 Oct 24 2004 libheteroxa10.dylib
-rw-r--r-- 1 discus orauser 1516340 Nov 16 2004 libnnz10.dylib
lrwxr-xr-x 1 discus orauser 18 Feb 16 12:44 libocci.dylib -> libocci.dylib.10.1
-rw-r--r-- 1 discus orauser 1841448 Oct 24 2004 libocci.dylib.10.1
-rwxr-xr-x 1 discus orauser 66160096 Dec 14 2004 libociei.dylib
-rwxr-xr-x 1 discus orauser 93028 Nov 9 2004 libocijdbc10.dylib
-rwxr-xr-x 1 discus orauser 744612 Oct 24 2004 libsqlplus.dylib
-r--r--r-- 1 discus orauser 54032 Jul 5 2004 ocrs12.jar
-r--r--r-- 1 discus orauser 1397543 Jul 5 2004 ojdbc14.jar
-r--r--r-- 1 discus orauser 5018319 Jul 7 2004 orai18n.jar
drwxr-xr-x 4 discus orauser 136 Dec 14 2004 sdk
-rwxr-xr-x 1 discus orauser 15660 Dec 13 2004 sqlplus
-rw-r--r-- 1 discus orauser 2072 Feb 16 13:19 tnsnames.ora
pb17:˜ discus$

注)
赤太字で示したシンボリックリンクは今回事前に作成したもので、それらのシンボリックリンクは作成しなくても通常利用には問題ない。以前の記事参照のこと
尚、今回は事前に参照していた資料にシンボリックリンクの作成に関する記述があったため前述のシンボリックリンクを作成した。
(ほんとうに必要なのか? という点については未検証であることを書き加えておく。余計なものだとしても悪さはしないでしょう。きっと。)


では、早速、Ruby on Rails 2.0.2からOracleへアクセスするための準備作業に取りかかることにする。
まず、RubyForgeからruby-oci8-1.0.0.tar.gzをダウンロード、解凍する。

pb17:/Volumes/Repository/temp discus$ curl -L -O http://rubyforge.org/frs/download.php/28396/ruby-oci8-1.0.0.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 104k 100 104k 0 0 41090 0 0:00:02 0:00:02 --:--:-- 77167
pb17:/Volumes/Repository/temp discus$ ll
-rw-r--r-- 1 discus admin 593589 Dec 17 14:57 MacPorts-1.6.0-10.4-Tiger.dmg
-rw-r--r-- 1 discus admin 239926399 Aug 14 2007 aug07_adc_refib_update.dmg
-rw-r--r-- 1 discus admin 326 Apr 28 2006 comics.sql
-rw-r--r-- 1 discus admin 107494 Nov 25 20:31 ruby-oci8-1.0.0.tar.gz
-rw-r--r-- 1 discus admin 204841 May 24 2007 rubygems-0.9.4.tgz
pb17:/Volumes/Repository/temp discus$ gzip -dc ruby-oci8-1.0.0.tar.gz | tar xvf -
ruby-oci8-1.0.0/
ruby-oci8-1.0.0/NEWS
ruby-oci8-1.0.0/ChangeLog
ruby-oci8-1.0.0/Makefile

・・・中略・・・

ruby-oci8-1.0.0/test/test_oci8.rb
ruby-oci8-1.0.0/test/test_oradate.rb
ruby-oci8-1.0.0/test/test_oranumber.rb
ruby-oci8-1.0.0/test/test_metadata.rb

解凍したらmakeする。Oracle Instant Clientをちゃんと認識しているのがわかる。

pb17:/Volumes/Repository/temp discus$ cd ruby-oci8-1.0.0
pb17:/Volumes/Repository/temp/ruby-oci8-1.0.0 discus$ make
ruby setup.rb config
---> lib
---> lib/DBD
---> lib/DBD/OCI8
<--- lib/DBD/OCI8
<--- lib/DBD
<--- lib
---> ext
---> ext/oci8
/opt/local/bin/ruby /Volumes/Repository/temp/ruby-oci8-1.0.0/ext/oci8/extconf.rb
checking for load library path... (DYLD_LIBRARY_PATH)...
found: /Users/Shared/instantclient10_1/libclntsh.dylib.10.1 looks like an instant client.
checking for cc... ok
checking for gcc... yes
checking for LP64... no
checking for ruby header... ok
checking for OCIInitialize() in oci.h... yes
checking for OCIEnvCreate()... yes
checking for OCITerminate()... yes
checking for OCILobOpen()... yes
checking for OCILobClose()... yes
checking for OCILobCreateTemporary()... yes
checking for OCILobGetChunkSize()... yes
checking for OCILobLocatorAssign()... yes
creating ../../lib/oci8.rb from /Volumes/Repository/temp/ruby-oci8-1.0.0/ext/oci8/../../lib/oci8.rb.in
creating extconf.h
creating Makefile
<--- ext/oci8

・・・中略・・・

/usr/bin/gcc-4.0 -I. -I. -I/opt/local/lib/ruby/1.8/powerpc-darwin8.11.0 -I/Volumes/Repository/temp/ruby-oci8-1.0.0/ext/oci8 -DRUBY_EXTCONF_H=\"extconf.h\" -I/opt/local/include -fno-common -O2
-fno-common -pipe -fno-common -I/Users/Shared/instantclient10_1/sdk/include -Wall -c attr.c
cc -dynamic -bundle -undefined suppress -flat_namespace -o oci8lib.bundle oci8.o handle.o const.o env.o error.o svcctx.o server.o session.o stmt.o define.o bind.o describe.o descriptor.o
param.o lob.o oradate.o oranumber.o ocinumber.o attr.o -L"." -L"/opt/local/lib" -L. -L/opt/local/lib -lruby -L/Users/Shared/instantclient10_1 -lclntsh -lpthread -ldl -lobjc
<--- ext/oci8
<--- ext
pb17:/Volumes/Repository/temp/ruby-oci8-1.0.0 discus$

makeが無事終了したらinstallする。(sudoで!)

pb17:/Volumes/Repository/temp/ruby-oci8-1.0.0 discus$ sudo make install
Password:
ruby setup.rb install
---> lib
mkdir -p /opt/local/lib/ruby/site_ruby/1.8/
install oci8.rb /opt/local/lib/ruby/site_ruby/1.8/
---> lib/DBD
mkdir -p /opt/local/lib/ruby/site_ruby/1.8/DBD
---> lib/DBD/OCI8
mkdir -p /opt/local/lib/ruby/site_ruby/1.8/DBD/OCI8
install OCI8.rb /opt/local/lib/ruby/site_ruby/1.8/DBD/OCI8
<--- lib/DBD/OCI8
<--- lib/DBD
<--- lib
---> ext
---> ext/oci8
mkdir -p /opt/local/lib/ruby/site_ruby/1.8/powerpc-darwin8.11.0/.
install oci8lib.bundle /opt/local/lib/ruby/site_ruby/1.8/powerpc-darwin8.11.0/.
<--- ext/oci8
<--- ext
pb17:/Volumes/Repository/temp/ruby-oci8-1.0.0 discus$

ということでruby-oci8のインストールまで無事に終了した。(Ruby初心者の私でもなんとかできました。。。。 :)

つづく・・・・




参考にしたサイトを以下に載せておきます。
OTN:Ruby on Rails on Oracle: A Simple Tutorial
OTN:Ruby on Rails with Oracle FAQ
(但し、RoRもruby-oci8関連の設定方法も参考にはなりますが古いバージョンを利用した解説なので注意が必要ですね。)

Connecting Ruby on Rails to Oracle on an Intel Mac in Leopard (Mac OSX 10.5)
上記サイトの情報は(2008/2/24時点では比較的あたらしい、しかもIntel Macのネタですね。。

ruby-oci8 - Oracle Instant Client
ruby-oci8インストール手順

Rails supports Oracle 8i, 9i, and 10g.
How to Connect To Oracle
ruby 2.xでoracleを利用する設定関連など

以下、Rails 2 と Oracleを接続するためのdatabase.ymlの設定例の引用

Database_ymd_rails_2_and_oracle

oracle_adapter.rb
oracle_adapter.rbのダウンロード先

|

トラックバック


この記事へのトラックバック一覧です: Mac de Ruby on Rails - #3 - Oracleと遊ぶ #2:

コメント

コメントを書く