2011年6月28日火曜日

rails on oracle (oracleで接続する手順) その1

■概要

railsをoracleで接続したい人はあまり多くないと聞いた & 最近の情報があまり見当たらないので、ニッチな人向けに纏めておこうと思います。

■Oracle XEのインストール

まずはサーバ側。既に何らかのOracleが存在する場合はここはパスして下さい。

・http://www.oracle.com/technetwork/database/express-edition/downloads/102xelinsoft-102048.html
ここからoracle-xe-univ-10.2.0.1-1.0.i386.rpm をダウンロード

※アカウントが必要なので先に登録して下さい。
※今日(2011/06/28)調べたらOracle XE 11.2 betaなる文字が!!

・↑をインストール

$ sudo rpm -ivh oracle-xe-univ-10.2.0.1-1.0.i386.rpm
$ sudo /etc/init.d/oracle-xe configure

↓管理アプリのポートを聞かれてます。他とバッティングする場合は変えましょう(例 9080)。
Specify the HTTP port that will be used for Oracle Application Express [8080]:

↓Oracleの待ち受けポートです。通常はdefaultのままで良いでしょう。
Specify a port that will be used for the database listener [1521]:

↓SYSとSYSTEMのパスワードをきかれてるので適当な物にしましょう。
Specify a password to be used for database accounts. Note that the same
password will be used for SYS and SYSTEM. Oracle recommends the use of
different passwords for each database account. This can be done after
initial configuration:

↓OS起動時に起動するかと言われてるので、通常稼動環境ではyです。
Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]:

・確認

$ sudo /etc/init.d/oracle-xe status

■Oracle Instance Clientのインストール

続いては接続側。できるだけ接続側は綺麗にしておきたいので、Oracle Instance Clientから接続しようと思います。

・http://www.oracle.com/technetwork/jp/topics/index-099943-ja.html より対応するバージョンをダウンロード
oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.1.0-1.x86_64.rpm
oracle-instantclient11.2-sqlplus-11.2.0.1.0-1.x86_64.rpm
をダウンロードしてみました。

・↑をインストール

$ sudo rpm -ivh oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.rpm
$ sudo rpm -ivh oracle-instantclient11.2-devel-11.2.0.1.0-1.x86_64.rpm
$ sudo rpm -ivh oracle-instantclient11.2-sqlplus-11.2.0.1.0-1.x86_64.rpm

・環境変数に下記を設定

$ vim ~/.bash_profile
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib/:$LD_LIBRARY_PATH
export NLS_LANG=JAPANESE_JAPAN.AL32UTF8
export PATH=/usr/lib/oracle/11.2/client64/bin/:$PATH

$ source ~/.bash_profile

・接続確認

$ sqlplus system/パスワード@サーバのIP:1521/XE

■railsから接続

・ruby-oci8のインストール

$ gem install ruby-oci8 -v2.0.6
(Oracle Instance Clientの場合は、LD_LIBRARY_PATHを設定しておけばコンパイルに支障が無いようです)

・rails試しに作成

$ rails new oracle_test -d oracle
$ cd oracle_test
$ vim Gemfile
ruby-oci8の辺りを↓のように記載
gem 'ruby-oci8', '~> 2.0.6'
# gem 'activerecord-oracle_enhanced-adapter', '~> 1.3.2'
gem 'activerecord-oracle_enhanced-adapter', '~> 1.3.2', :git => 'git://github.com/rsim/oracle-enhanced.git' (1.3.2以降にユーザー作成機能が追加されていますので以後はそれで実行しています)

$ bundle install
$ vim config/database.yml
development:
adapter: oracle_enhanced
database: //サーバのIP:1521/XE
username: kennyj_development
password: xxxxx

test:
adapter: oracle_enhanced
database: //サーバのIP:1521/XE
username: kennyj_test
password: xxxxx

production:
adapter: oracle_enhanced
database: //サーバのIP:1521/XE
username: kennyj_production
password: xxxxx

$ rake db:create:all (userまで作ってくれます!)
Please provide the SYSTEM password for your oracle installation
>xxxxx (development)
Please provide the SYSTEM password for your oracle installation
>xxxxx (test)
Please provide the SYSTEM password for your oracle installation
>xxxxx (production)

$ rails g scaffold Post title:string body:text (いつもの奴生成)
$ rake db:migrate
== CreatePosts: migrating ====================================================
-- create_table(:posts)
-> 0.0349s
== CreatePosts: migrated (0.0350s) ===========================================

$ rake test (test実行)

$ rails s
(ブラウザで確認)
http://localhost:3000/posts

■さらに使いやすく...

次回はもう少し濃い話題(fetchループ, nvarchar, 表領域, oracle_enhanced特有の初期設定...etc)を書ければと思います。

■雑感

oracle_enhanced異様に進化している気がする...

0 件のコメント:

コメントを投稿