Rails MacOSX 下 Oracle Instant Client 的安装及 ruby-oci8 安装要点备忘

saillee · 2013年12月26日 · 最后由 billwen 回复于 2013年12月28日 · 5328 次阅读

好不容易搞定了黑苹果,接下来就是 Rails 开发环境的搭建了。下面简单说说。 先吐槽一下 Oracle 对 Mac 的支持真是太弱,现在都 12c 了,11g 的 Enterprise 版的 Database 没有也就算了,连 XE 版都没有,太不算事了。难道大家都只用 Linux?Mac 可是开发的高帅富环境啊!好歹 Mac 上也是跑 Unix 内核的,就因为 MacOSX 的 server 少吗?只能装下 Instant Client 了。

入正题,先从 Oracle 网站上 download 下面几个文件(注意要和你自己的 cpu 匹配,我用 64bit 的): http://download.oracle.com/otn/mac/instantclient/11203/instantclient-basic-macos.x64-11.2.0.3.0.zip http://download.oracle.com/otn/mac/instantclient/11203/instantclient-sqlplus-macos.x64-11.2.0.3.0.zip http://download.oracle.com/otn/mac/instantclient/11203/instantclient-sdk-macos.x64-11.2.0.3.0.zip 之后启动 Terminal 到下载目录下运行(重建 InstantClient 的目录结构):

cd Downloads
unzip -qq instantclient-sqlplus-macos.x64-11.2.0.3.0.zip
unzip -qq instantclient-basic-macos.x64-11.2.0.3.0.zip
unzip -qq instantclient-sdk-macos.x64-11.2.0.3.0.zip
mkdir -p /Applications/oracle/product/instantclient_64/11.2.0.3.0/bin
mkdir -p /Applications/oracle/product/instantclient_64/11.2.0.3.0/lib
mkdir -p /Applications/oracle/product/instantclient_64/11.2.0.3.0/jdbc/lib
mkdir -p /Applications/oracle/product/instantclient_64/11.2.0.3.0/rdbms/jlib
mkdir -p /Applications/oracle/product/instantclient_64/11.2.0.3.0/sqlplus/admin
cd instantclient_11_2
mv ojdbc* /Applications/oracle/product/instantclient_64/11.2.0.3.0/jdbc/lib/
mv x*.jar /Applications/oracle/product/instantclient_64/11.2.0.3.0/rdbms/jlib/
mv glogin.sql /Applications/oracle/product/instantclient_64/11.2.0.3.0/sqlplus/admin/
mv *dylib* /Applications/oracle/product/instantclient_64/11.2.0.3.0/lib/
mv sdk /Applications/oracle/product/instantclient_64/11.2.0.3.0/lib/
mv *README /Applications/oracle/product/instantclient_64/11.2.0.3.0/
mv * /Applications/oracle/product/instantclient_64/11.2.0.3.0/bin/

最后设置 Oracle InstantClient 的运行环境参数,运行命令:vim ~/.bash_profile,贴入以下内容:

export ORACLE_BASE=/Applications/oracle
export ORACLE_HOME=$ORACLE_BASE/product/instantclient_64/11.2.0.3.0
export PATH=$ORACLE_HOME/bin:$PATH
export DYLD_LIBRARY_PATH=$ORACLE_HOME/lib
export TNS_ADMIN=$ORACLE_BASE/admin/network
export NLS_LANG="AMERICAN_AMERICA.UTF8"

最后运行以下脚本安装 ruby 的 oracle 接口即可。

ln -s /Applications/oracle/product/instantclient_64/11.2.0.3.0/lib/libclntsh.dylib.11.1 /Applications/oracle/product/instantclient_64/11.2.0.3.0/lib/libclntsh.dylib
gem install ruby-oci8

ruby-oci8 不是 32 位的程序么?你用 64 位 client+64 位的 os 也行?

ruby-oci8 是根据你的库进行动态编译的,所以只要你用的 oracle client 库是 64bit 的,编译出来的也是 64bit 的。看最后一部分,ruby-oci8 用到了 libclntsh.dylib 这个库。另外,你可以看看 sdk 里面的文件就比较明白了,那里有很多头文件等。

我折腾过一阵 64 位的,一直编译失败,不成功,后来在文档上看到这么一句

http://ruby-oci8.rubyforge.org/en/

Install Oracle Instant Client Packages Donwload Instant Client Packages

Download the following packages from Oracle Technology Network.

Instant Client Package - Basic or Basic Lite Instant Client Package - SDK Instant Client Package - SQL*Plus Note: use 32-bit packages for 32-bit ruby even though the OS is 64-bit.

换成 32 位系统搞定,64 位系统就搁置在哪里了。

需要 登陆 后方可回复, 如果你还没有账号请 注册新账号