23

我正在尝试在 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
4

12 回答 12

48

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

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

之后应该工作。文件结构应如下所示:

在此处输入图像描述

于 2014-01-29T21:44:59.853 回答
8

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

于 2016-03-09T22:47:35.600 回答
3

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

  1. 去这里:http ://www.oracle.com/technetwork/topics/intel-macsoft-096467.html 下载Instantclient-basicinstantclient-sdkinstantclient-sqlplus的 64 位版本(我使用的是 -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 路径来修复库,这最终会阻塞 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并更改此行:

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
于 2016-03-31T23:13:50.223 回答
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
...

并且gem安装成功!

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
于 2016-11-16T17:17:35.423 回答
2

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

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

请按照以下步骤禁用 SIP:

  1. 重新启动您的 Mac。
  2. 在 OS X 启动之前,按住 Command-R 并一直按住它,直到您看到 Apple 图标和进度条。释放。这将引导您进入恢复。
  3. 从实用程序菜单中,选择终端。
  4. 在提示符下键入以下内容,然后按 Return:csrutil disable
  5. 终端应显示 SIP 已禁用的消息。
  6. 从  菜单中,选择重新启动。

如果您仍然遇到问题,请尝试此链接 http://blog.codiez.co.za/2013/09/setup-oracle-instant-client-ruby-oci8-gem-mac/

于 2016-07-24T16:38:10.943 回答
1

错误消息有些冗长,但它基本上表明您需要安装Oracle 客户端库并将DYLD_LIBRARY_PATH变量指向该位置。

于 2013-05-21T07:08:35.910 回答
1

首先从他们的网站下载适用于 32 位 Linux 的 oracle Instantclient 版本 11.2。版本 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'
于 2014-08-27T14:28:05.910 回答
1

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

只需运行以下 brew 命令:

brew tap InstantClientTap/instantclient
brew install instantclient-basic
brew install instantclient-sqlplus
brew install instantclient-sdk
于 2020-12-16T09:12:22.110 回答
0

由于某种原因,ruby-oci8 没有为我安装即时 client_11_2。我尝试了这里和其他地方建议的所有答案,但无法完成。后来我尝试使用即时客户端 12_1,它没有任何问题。

于 2019-08-22T06:02:03.893 回答
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'
于 2019-10-25T08:03:47.843 回答
0

然而,对于那些使用 zsh 而不是 bash 的人仍然遵循Etusm 的回答,在步骤 8 和 9 中替换为

8. export DYLD_LIBRARY_PATH=/opt/oracle/instantclient_11_2 
9. export ORACLE_HOME=/opt/oracle/instantclient_11_2  
于 2021-06-30T05:22:00.167 回答
-1

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

  1. 即时客户端-基本-macos.x64-12.1.0.2.0.zip
  2. 即时客户端-sqlplus-macos.x64-12.1.0.2.0.zip
  3. Instantclient-sdk-macos.x64-12.1.0.2.0.zip

然后按照以下步骤操作:-

  1. 在 /opt/oracle 创建目录
  2. 首先解压缩 Instantclient-basic,移动到 /opt/oracle(应该添加一个文件夹 -
    类似于 /opt/oracle/instantclient_12_1/)
  3. 解压 Instantclient-sdk 并将其内容移动到 /opt/oracle/instantclient_12_1/
  4. 解压 Instantclient-sqlplus 并移动其内容 /opt/oracle/instantclient_12_1/
  5. 打开终端(如果您还没有)并输入...

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

  1. cd /opt/oracle/instantclient_12_1

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

ln -s libocci.dylib.12.1 libocci.dylib

  1. 运行:环境
    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

注意:- 如果这仍然不起作用,请尝试在您的 Mac 上禁用 SIP, 然后再试一次。

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

于 2016-07-27T09:31:26.833 回答