OracleをRailsでつないだのでメモ
環境
- macOS Sierra 10.12.2
- ruby 2.4.1
- rails 5.0.2
- activerecord-oracle_enhanced-adapter 1.7.10
- ruby-oci8 2.2.3
AWSにOracle入れたけどAWSのSDKは使ってない
下準備
SQL DEVELOPER入れた
SQLDeveloper
- GUIのOracleクライアント
- railsとoracleを繋ぐだけなら入れる必要はなし
SQL*Plus入れた
ダウンロードと解凍
SQLPlus
- mac用のbasic,sqlplus,sdkをダウンロード
- 適当なパスに解凍(ここでは$HOME/lib/instantclient_12_1)
$ cd ~/lib
$ mkdir instantclient_12_1
$ unzip instantclient-basic-macos.x64-12.1.0.2.0.zip
$ unzip instantclient-sqlplus-macos.x64-12.1.0.2.0.zip
$ unzip instantclient-sdk-macos.x64-12.1.0.2.0.zip
シンボリックリンクを貼っておく
$ cd ~/lib/instantclient_12_1
$ ln -s libclntsh.dylib.12.1 libclntsh.dylib
$ ln -s libocci.dylib.12.1 libocci.dylib
環境変数設定
.bash_profile
export PATH=$HOME/lib/instantclient_12_1:$PATH
export OCI_DIR=$HOME/lib/instantclient_12_1
export TNS_ADMIN=$HOME/lib/oracle/network/admin
export NLS_LANG=Japanese_Japan.UTF8
tnsnames.ora
- ローカル・ネーミング・パラメータ構成ファイル (tnsnames.ora)
- tnsnames.oraをTNS_ADMINに設定したパスに作成
- SERVICE_NAMEにはRDSの「DB名」を入れる
tnsnames.ora
net_service_name =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)
(HOST=servername)
(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=ORCL))
)
sqlplusで接続確認
- パスは通ったけどコマンドを叩いたらエラー
$ which sqlplus
/Users/myname/lib/instantclient_12_1/sqlplus
$ sqlplus username/password@net_service_name
ERROR:
ORA-21561: OID generation failed
- hostnameをhostsに書いたらつながった
$ sudo sh -c "echo '127.0.0.1 `hostname`' >> /etc/hosts"
$ sqlplus username/password@net_service_name
SQL*Plus: Release 12.1.0.2.0 Production on Fri Mar 24 18:51:34 2017
...
Connected to:
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
SQL>
Railsの設定
Gemfile
Gemfile
gem rails 5.0
gem activerecord-oracle_enhanced-adapter
gem ruby-oci8
bundle install
database.yml
tnsnames.oraで設定したネットサービス名をdatabaseに設定
database.yml
development:
adapter: oracle_enhanced
database: net_service_name
username: username
password: password
接続確認
console
[1] pry(main)> ActiveRecord::Base.connection.current_database
=> ORCL