如何安装ruby-oci8?

时间:2012-08-10 01:17:09

标签: ruby macos oracle

我正在尝试在OS X上安装ruby-oci8。

我尝试使用和不使用sudo安装。

没有sudo的错误消息:

gem install ruby-oci8
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /Library/Ruby/Gems/1.8 directory.

sudo的错误消息:

sudo gem install ruby-oci8
Password:
Building native extensions.  This could take a while...
ERROR:  Error installing ruby-oci8:
    ERROR: Failed to build gem native extension.

        /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
checking for load library path... 
  DYLD_LIBRARY_PATH is not set.
checking for cc... ok
checking for gcc... yes
checking for LP64... yes
checking for sys/types.h... yes
checking for ruby header... ok
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
    --with-instant-client
    --without-instant-client
./oraconf.rb:887:in `get_home': RuntimeError (RuntimeError)
    from ./oraconf.rb:703:in `initialize'
    from ./oraconf.rb:319:in `new'
    from ./oraconf.rb:319:in `get'
    from extconf.rb:18

错误讯息:

Set the environment variable ORACLE_HOME if Oracle Full Client.
Append the path of Oracle client libraries to DYLD_LIBRARY_PATH if Oracle Instant Client.

The 'sudo' command unset some environment variables for security reasons.
Pass required varialbes as follows
     sudo env DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH /usr/bin/gem install ruby-oci8
  or 
     sudo env ORACLE_HOME=$ORACLE_HOME /usr/bin/gem install ruby-oci8


Backtrace:
  ./oraconf.rb:887:in `get_home'
  ./oraconf.rb:703:in `initialize'
  ./oraconf.rb:319:in `new'
  ./oraconf.rb:319:in `get'
  extconf.rb:18

See:
 * http://ruby-oci8.rubyforge.org/en/HowToInstall.html
 * http://ruby-oci8.rubyforge.org/en/ReportInstallProblem.html

12 个答案:

答案 0 :(得分:46)

为10.9 / 10.10 / 10.11OSX Mavericks / Yosemite / El Capitan安装ruby-oci8的稍微更新版本 - 一步一步:

  1. 转到此处:http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html
  2. 下载64位版本的instantclient-sqlplus,instantclient-sdk,instantclient-basic - 32位版本不适用于OSX 10.9
  3. 在/ opt / oracle
  4. 创建目录
  5. 首先解压InstantClient-basic,转到/ opt / oracle(应该添加一个文件夹 - 比如/ opt / oracle / instantclient_11_2 /)
  6. 解压缩instantclient-sdk并将其内容移至/ opt / oracle / instantclient_11_2 /
  7. 解压缩instantclient-sqlplus并移动其内容/ opt / oracle / instantclient_11_2 /
  8. 打开终端(如果您还没有)并输入...
  9. DYLD_LIBRARY_PATH=/opt/oracle/instantclient_11_2 export DYLD_LIBRARY_PATH
  10. ORACLE_HOME=/opt/oracle/instantclient_11_2 export ORACLE_HOME
  11. cd /opt/oracle/instantclient_11_2
  12. ln -s libclntsh.dylib.11.1 libclntsh.dylib(创建符号链接)
  13. env
  14. 验证DYLD_LIBRARY_PATH = / opt / oracle / instantclient_11_2(确保没有尾随/在instantclient_11_2之后)
  15. 验证ORACLE_HOME = / opt / oracle / instantclient_11_2
  16. gem install ruby​​-oci8
  17. 之后应该工作。文件结构应类似于:

    enter image description here

答案 1 :(得分:8)

对于任何试图在2016年的旧年工作的人,错误消息现在包含指向页面http://www.rubydoc.info/github/kubo/ruby-oci8/file/docs/install-on-osx.md的链接,该页面为您提供了如何使用Homebrew进行操作的说明。以上所有的东西都没有为我工作(我尝试了所有这些),但后来我把这个问题交给了同事,他们说:“嘿,你在那里的错误信息中尝试了那个链接吗?”果然,这样做了。

答案 2 :(得分:3)

在OS X Sierra上,由于系统完整性保护(https://forums.developer.apple.com/thread/13161),我无法设置DYLD_LIBRARY_PATH,因此我将所有oracle的即时客户端文件复制到/users/.../lib,因为它有后备到某些目录,包括这一个:

...
checking the default value of DYLD_FALLBACK_LIBRARY_PATH...
checking /Users/<username>/lib... no
checking /usr/local/lib... no
checking /lib... no
checking /usr/lib... no
...

宝石安装成功!

cp -R /opt/oracle/instantclient_11_2/* /users/..username../lib
gem install ruby-oci8

Building native extensions.  This could take a while...
Successfully installed ruby-oci8-2.2.2
1 gem installed

答案 3 :(得分:2)

如果其他人需要在mac osx el capitan上的 Ruby 1.8.7 上安装旧版本的ruby-oci8,我成功安装 ruby​​-oci8-2.1.2 < / strong>使用以下方法。我认为它也适用于其他ruby-1.8.7版本(ruby-oci8&lt; 2.2.0)但我还没有检查过其他版本:

  1. 转到此处:http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html 下载64位版本的 instantclient-basic instantclient-sdk instantclient-sqlplus (我使用-macos.x64- 11.2.0.4.0版本)
  2. 将zip文件复制到/ opt / oracle并解压缩每个文件。它应该将它们提取到/ opt / oracle / instantclient_11_2
  3. cd /opt/oracle/instantclient_11_2
  4. ln -s libclntsh.dylib.11.1 libclntsh.dylib
  5. curl -O https://raw.githubusercontent.com/kubo/fix_oralib_osx/master/fix_oralib.rb
  6. 确保在运行脚本时附加-a标志,这将使脚本使用绝对路径而不是@rpath / * .dylib路径修复libs,最终阻塞gem构建过程。 (如果要检查,首先阅读fix_oralib.rb脚本)。无论如何,运行:ruby fix_oralib.rb -a
  7. export OCI_DIR=/opt/oracle/instantclient_11_2
  8. 现在抓住ruby-oci8来源git clone https://github.com/kubo/ruby-oci8.git
  9. 签出您要安装的版本(我需要2.1.2)git checkout ruby-oci8-2.1.2
  10. 编辑此文件: ruby​​-oci8 / ext / oci8 / oraconf.rb 并更改此行:
  11. when /darwin/ @@ld_envs = %w[DYLD_LIBRARY_PATH] so_ext = 'dylib'

    对此:

    when /darwin/ @@ld_envs = %w[DYLD_LIBRARY_PATH OCI_DIR] so_ext = 'dylib'

    1. 现在更改回gem本身的根目录并构建gemspec:gem build ruby-oci8.gemspec
    2. 2potatocakes$ gem install ruby-oci8-2.1.2.gem Building native extensions. This could take a while... Successfully installed ruby-oci8-2.1.2 1 gem installed

答案 4 :(得分:1)

错误消息有点冗长,但它基本上表示您需要安装Oracle Client libraries并将DYLD_LIBRARY_PATH变量指向该位置。

答案 5 :(得分:1)

如果您使用MAC与El Capitan,由于系统完整性保护(SIP)的最新嵌入式功能,DYLD_ *环境变量将被忽略。

所以如果你想用El Capitan安装ruby-oci8,首先你必须禁用SIP。

按照以下步骤禁用SIP:

  1. 重新启动Mac。
  2. 在OS X启动之前,按住Command-R并保持按住直到看到Apple图标和进度条。发布。这会引导您进入Recovery。
  3. 从Utilities菜单中,选择Terminal。
  4. 在提示符下键入以下内容,然后按Return:csrutil disable
  5. 终端应显示SIP已被禁用的消息。
  6. 从菜单中选择重新启动。
  7. 如果您仍然遇到问题,请尝试此链接 http://blog.codiez.co.za/2013/09/setup-oracle-instant-client-ruby-oci8-gem-mac/

答案 6 :(得分:0)

首先从他们的网站下载oracle instantclient版本11.2 for 32位Linux。版本12或更高版本不适用于可视化数据库(我总是抓住.zip版本,因此指南假设。它还假设下载的文件位于/ tmp文件夹中。)。您将需要基本版本,sqlplus和sdk。完成这些下载后,在终端

中执行以下命令
sudo mkdir -p /opt/oracle
sudo cd /opt/oracle
sudo unzip /tmp/instantclient-basic-linux-11.2.0.4.0.zip
sudo unzip /tmp/instantclient-sqlplus-linux-11.2.0.4.0.zip
sudo unzip /tmp/instantclient-sdk-linux-11.2.0.4.0.zip
sudo apt-get install libaio1
sudo cd instantclient_11_2
sudo ln -s libclntsh.so.11.2 libclntsh.so

- 现在,我们需要告诉我们的bash shell oracle客户端所在的位置。因此,请允许自己查看隐藏文件,并使用文本编辑器打开$ home / .bashrc。将以下行添加到文件的底部,然后保存:

export LD_LIBRARY_PATH=/opt/oracle/instantclient_11_2

- 在源终端中使用此命令加载.bashrc以加载新设置:

source ~/.bashrc

- 如果我们正确地完成了所有工作,我们应该能够安装oracle数据库适配器gem。尝试使用此命令:

gem install ruby-oci8 -v '2.1.5'

答案 7 :(得分:0)

由于某种原因,ruby-oci8尚未与即时client_11_2一起安装。我尝试了这里和其他地方建议的所有答案,但无法完成。后来我尝试使用即时客户端12_1,它可以正常工作。

答案 8 :(得分:0)

CENTOS7

的ruby-oci8安装更新版本
cd /etc/yum.repos.d
sudo wget http://yum.oracle.com/RPM-GPG-KEY-oracle-ol7
sudo rpm --import RPM-GPG-KEY-oracle-ol7
sudo yum-config-manager --enable ol7_oracle_instantclient
sudo yum install oracle-instantclient18.3-basic
sudo yum install oracle-instantclient18.3-devel
sudo yum install oracle-instantclient18.3-jdbc
sudo yum install oracle-instantclient18.3-sqlplus
export ORACLE_HOME=/usr/lib/oracle/18.3/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
gem install ruby-oci8 -v '2.2.7'

答案 9 :(得分:0)

这看起来很痛苦。我想我可能已经找到了解决此问题的更好方法(至少在Mac OS上如此)。

只需运行以下brew命令:

brew tap InstantClientTap/instantclient
brew install instantclient-basic
brew install instantclient-sqlplus
brew install instantclient-sdk

答案 10 :(得分:0)

对于那些使用 zsh 而不是 bash 的人仍然遵循 Etusm's 答案但是,在第 8 步和第 9 步替换为

8. export DYLD_LIBRARY_PATH=/opt/oracle/instantclient_11_2 
9. export ORACLE_HOME=/opt/oracle/instantclient_11_2  

答案 11 :(得分:-1)

如果您使用 OS X El Capitan,Yosemite和Mavericks 。您应该使用 Instant Client 12.1.0.2 从oracle网站下载Instant Client 12.1.0.2

  1. instantclient-basic-macos.x64-12.1.0.2.0.zip
  2. instantclient-sqlplus-macos.x64-12.1.0.2.0.zip
  3. instantclient-sdk-macos.x64-12.1.0.2.0.zip
  4. 然后按照以下步骤: -

    1. 在/ opt / oracle
    2. 创建目录
    3. 首先解压Instantclient-basic,移至/ opt / oracle(应添加文件夹 -
      像/ opt / oracle / instantclient_12_1 /)
    4. 之类的东西
    5. 解压缩instantclient-sdk并将其内容移至 的/ opt / ORACLE / instantclient_12_1 /
    6. 解压Instantclient-sqlplus并移动其内容 的/ opt / ORACLE / instantclient_12_1 /
    7. 打开终端(如果您还没有)并输入...
    8.   

      DYLD_LIBRARY_PATH = / opt / oracle / instantclient_12_1导出   DYLD_LIBRARY_PATH       ORACLE_HOME = / opt / oracle / instantclient_12_1 export ORACLE_HOME

      1. cd / opt / oracle / instantclient_12_1
      2.   

        ln -s libclntsh.dylib.12.1 libclntsh.dylib(创建符号链接)

             

        ln -s libocci.dylib.12.1 libocci.dylib

        1. run:env
          1. 验证DYLD_LIBRARY_PATH = / opt / oracle / instantclient_11_2(确保有) 没有尾随/在instantclient_11_2之后) 验证ORACLE_HOME = / opt / oracle / instantclient_11_2
          2. gem install ruby​​-oci8 -v gemVersion
        2. 注意: - 如果这仍然不起作用,请尝试禁用Mac上的SIP             然后再试一次。

          它对我有用,希望它也适合你。 一切顺利