0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ruby oci-8をインストールする

Last updated at Posted at 2021-02-04

TLDR

はまったところを中心にメモ書きです。
ruby-oci8をインストールするには、

  • 公式 からInstantClientをコピーする
  • 環境変数を設定する
  • 公式 からSDKをダウンロード、InstantClientをコピーしたディレクトリ先に移す

過程

sudo gem install ruby-oci8

以下のエラーが出る。

$ sudo -E 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.

    current directory: /Library/Ruby/Gems/2.6.0/gems/ruby-oci8-2.2.8/ext/oci8
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby -I /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0 -r ./siteconf20201214-8821-yb3nw.rb extconf.rb
attempting to locate oracle-instantclient...
checking load library path... 
*** 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/2.6/usr/bin/$(RUBY_BASE_NAME)
	--with-instant-client
	--without-instant-client
	--with-instant-client-dir
	--without-instant-client-dir
	--with-instant-client-include
	--without-instant-client-include=${instant-client-dir}/include
	--with-instant-client-lib
	--without-instant-client-lib=${instant-client-dir}/lib
/Library/Ruby/Gems/2.6.0/gems/ruby-oci8-2.2.8/ext/oci8/oraconf.rb:568:in `guess_ic_dir': RuntimeError (RuntimeError)
	from /Library/Ruby/Gems/2.6.0/gems/ruby-oci8-2.2.8/ext/oci8/oraconf.rb:268:in `get'
	from extconf.rb:22:in `<main>'
/Library/Ruby/Gems/2.6.0/gems/ruby-oci8-2.2.8/ext/oci8/oraconf.rb:568:in `guess_ic_dir': Set the environment variable DYLD_LIBRARY_PATH, DYLD_FALLBACK_LIBRARY_PATH or (RuntimeError)
OCI_DIR to point to the Instant client directory.

If DYLD_LIBRARY_PATH or DYLD_FALLBACK_LIBRARY_PATH is set, the environment
variable must be set at runtime also.

If OCI_DIR is set, dependent shared library paths are checked. If the checking
is passed, ruby-oci8 works without DYLD_LIBRARY_PATH or DYLD_FALLBACK_LIBRARY_PATH.

Note: OCI_DIR should be absolute path.
Note: DYLD_* environment variables are unavailable for security reasons on OS X 10.11 El Capitan.
	from /Library/Ruby/Gems/2.6.0/gems/ruby-oci8-2.2.8/ext/oci8/oraconf.rb:268:in `get'
	from extconf.rb:22:in `<main>'
  DYLD_LIBRARY_PATH is not set.
  DYLD_FALLBACK_LIBRARY_PATH is not set.
  checking OCI_DIR...
  checking the default value of DYLD_FALLBACK_LIBRARY_PATH...
    checking /Users/suzukiko/lib... no
    checking /usr/local/lib... no
    checking /lib... no
    checking /usr/lib... no
---------------------------------------------------
Error Message:
  Set the environment variable DYLD_LIBRARY_PATH, DYLD_FALLBACK_LIBRARY_PATH or
  OCI_DIR to point to the Instant client directory.
  
  If DYLD_LIBRARY_PATH or DYLD_FALLBACK_LIBRARY_PATH is set, the environment
  variable must be set at runtime also.
  
  If OCI_DIR is set, dependent shared library paths are checked. If the checking
  is passed, ruby-oci8 works without DYLD_LIBRARY_PATH or DYLD_FALLBACK_LIBRARY_PATH.
  
  Note: OCI_DIR should be absolute path.
  Note: DYLD_* environment variables are unavailable for security reasons on OS X 10.11 El Capitan.
  
Backtrace:
  /Library/Ruby/Gems/2.6.0/gems/ruby-oci8-2.2.8/ext/oci8/oraconf.rb:568:in `guess_ic_dir'
  /Library/Ruby/Gems/2.6.0/gems/ruby-oci8-2.2.8/ext/oci8/oraconf.rb:268:in `get'
  extconf.rb:22:in `<main>'
---------------------------------------------------
See:
 * http://www.rubydoc.info/github/kubo/ruby-oci8/file/docs/install-full-client.md for Oracle full client
 * http://www.rubydoc.info/github/kubo/ruby-oci8/file/docs/install-instant-client.md for Oracle instant client
 * http://www.rubydoc.info/github/kubo/ruby-oci8/file/docs/install-on-osx.md for OS X
 * http://www.rubydoc.info/github/kubo/ruby-oci8/file/docs/report-installation-issue.md to report an issue.


extconf failed, exit code 1

Gem files will remain installed in /Library/Ruby/Gems/2.6.0/gems/ruby-oci8-2.2.8 for inspection.
Results logged to /Library/Ruby/Gems/2.6.0/extensions/universal-darwin-19/2.6.0/ruby-oci8-2.2.8/gem_make.out

↓の2.2.1のようにInstant Clientのzipファイルを/opt/oralce/で解凍します。
https://docs.oracle.com/cd/F19136_01/lnoci/instant-client.html#GUID-D0042396-7C99-4450-962C-6E3DBF6EFD41

終わったら環境変数を設定します。※ディレクトリの終わりのスラッシュは不要であるのが注意点です。

OCI_DIR=/opt/oracle/instantclient_19_8 export OCI_DIR
DYLD_LIBRARY_PATH=/opt/oracle/instantclient_19_8 export DYLD_LIBRARY_PATH

環境変数を引き継ぐために-Eオプションをつけます。

sudo -E gem install ruby-oci8

SDKを入れろとエラーがでます。

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

    current directory: /Library/Ruby/Gems/2.6.0/gems/ruby-oci8-2.2.8/ext/oci8
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby -I /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0 -r ./siteconf20201214-8835-1h4v2a0.rb extconf.rb
attempting to locate oracle-instantclient...
checking load library path... 
  DYLD_LIBRARY_PATH is not set.
  DYLD_FALLBACK_LIBRARY_PATH is not set.
  checking OCI_DIR...
    checking /opt/oracle/instantclient_19_8... yes
  checking dependent shared libraries in /opt/oracle/instantclient_19_8/libclntsh.dylib.19.1...
  /opt/oracle/instantclient_19_8/libclntsh.dylib.19.1 looks like an instant client.
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/2.6/usr/bin/$(RUBY_BASE_NAME)
	--with-instant-client
	--without-instant-client
	--with-instant-client-dir
	--without-instant-client-dir
	--with-instant-client-include
	--without-instant-client-include=${instant-client-dir}/include
	--with-instant-client-lib
	--without-instant-client-lib=${instant-client-dir}/lib
/Library/Ruby/Gems/2.6.0/gems/ruby-oci8-2.2.8/ext/oci8/oraconf.rb:1054:in `initialize': RuntimeError (RuntimeError)
	from /Library/Ruby/Gems/2.6.0/gems/ruby-oci8-2.2.8/ext/oci8/oraconf.rb:271:in `new'
	from /Library/Ruby/Gems/2.6.0/gems/ruby-oci8-2.2.8/ext/oci8/oraconf.rb:271:in `get'
	from extconf.rb:22:in `<main>'
/Library/Ruby/Gems/2.6.0/gems/ruby-oci8-2.2.8/ext/oci8/oraconf.rb:1054:in `initialize': '/opt/oracle/instantclient_19_8/sdk/include/oci.h' does not exist. (RuntimeError)
Install 'Instant Client SDK'.
	from /Library/Ruby/Gems/2.6.0/gems/ruby-oci8-2.2.8/ext/oci8/oraconf.rb:271:in `new'
	from /Library/Ruby/Gems/2.6.0/gems/ruby-oci8-2.2.8/ext/oci8/oraconf.rb:271:in `get'
	from extconf.rb:22:in `<main>'
---------------------------------------------------
Error Message:
  '/opt/oracle/instantclient_19_8/sdk/include/oci.h' does not exist.
  Install 'Instant Client SDK'.

https://www.oracle.com/jp/database/technologies/instant-client/downloads.html
環境にあったSDKをインストールし、エラーメッセージに指定のあるディレクトリにおきます。

再度gem installを実行すると、

Error Message:
  Could not compile with Oracle instant client.
  You may need to set a environment variable:
      DYLD_LIBRARY_PATH=/opt/oracle/instantclient_19_8
      export DYLD_LIBRARY_PATH

(略)

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /Library/Ruby/Gems/2.6.0/extensions/universal-darwin-19/2.6.0/ruby-oci8-2.2.8/mkmf.log

extconf failed, exit code 1

とあったので、mkmf.logを見てみると、
/opt/oracle/instantclient_19_8/sdk/include
以下のファイルがないようなメッセージがあったため、(具体的なものは見失ってしまいまいた。)
ディレクトリをつくります。

 mkdir /opt/oracle/instantclient_19_8/sdk/include

作ったディレクトリへ

/SDKをインストールしたパス/instantclient10_1/sdk/include/

の中身を全てコピーします。

$ sudo -E gem install ruby-oci8
Building native extensions. This could take a while...
Successfully installed ruby-oci8-2.2.8
Parsing documentation for ruby-oci8-2.2.8
Installing ri documentation for ruby-oci8-2.2.8
Done installing documentation for ruby-oci8 after 1 seconds
1 gem installed

インストールできました。

参考

https://www.rubydoc.info/github/kubo/ruby-oci8/file/docs/install-instant-client.md
https://stackoverflow.com/questions/11894194/how-to-install-ruby-oci8
https://reboooot.net/post/su-and-sudo-spec-related-to-env/
https://docs.oracle.com/cd/F19136_01/lnoci/instant-client.html#GUID-AAB0378F-2C7B-41EB-ACAC-18DD5D052B01

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?