2013-07-18 74 views
7

我執行無法在Ubuntu上安裝12.04LTS紅寶石OCI8

$ bundle install 

對於我的Rails應用程序...(3.2.8)

權當它到達紅寶石OCI8 ...

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. 

    /home/ubuntu/.rvm/rubies/ruby-1.9.3-p448/bin/ruby extconf.rb 
checking for load library path... 
    LD_LIBRARY_PATH... 
    checking /usr/lib/oracle/12.1/client/... no 
    checking ld.so.conf... no 
checking for cc... ok 
checking for gcc... yes 
checking for LP64... no 
checking for sys/types.h... yes 
checking for ruby header... ok 
Get the version of Oracle from SQL*Plus... *** 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=/home/ubuntu/.rvm/rubies/ruby-1.9.3-p448/bin/ruby 
    --with-instant-client 
    --without-instant-client 
/home/ubuntu/.rvm/gems/ruby-1.9.3-p448/gems/ruby-oci8-2.1.5/ext/oci8/oraconf.rb:760:in `get_version': RuntimeError (RuntimeError) 
    from /home/ubuntu/.rvm/gems/ruby-1.9.3-p448/gems/ruby-oci8-2.1.5/ext/oci8/oraconf.rb:709:in `initialize' 
    from /home/ubuntu/.rvm/gems/ruby-1.9.3-p448/gems/ruby-oci8-2.1.5/ext/oci8/oraconf.rb:320:in `new' 
    from /home/ubuntu/.rvm/gems/ruby-1.9.3-p448/gems/ruby-oci8-2.1.5/ext/oci8/oraconf.rb:320:in `get' 
    from extconf.rb:18:in `<main>' 
--------------------------------------------------- 
Error Message: 
    cannot get Oracle version from sqlplus 
Backtrace: 
    /home/ubuntu/.rvm/gems/ruby-1.9.3-p448/gems/ruby-oci8-2.1.5/ext/oci8/oraconf.rb:760:in `get_version' 
    /home/ubuntu/.rvm/gems/ruby-1.9.3-p448/gems/ruby-oci8-2.1.5/ext/oci8/oraconf.rb:709:in `initialize' 
    /home/ubuntu/.rvm/gems/ruby-1.9.3-p448/gems/ruby-oci8-2.1.5/ext/oci8/oraconf.rb:320:in `new' 
    /home/ubuntu/.rvm/gems/ruby-1.9.3-p448/gems/ruby-oci8-2.1.5/ext/oci8/oraconf.rb:320:in `get' 
    extconf.rb:18:in `<main>' 
--------------------------------------------------- 
See: 
* http://ruby-oci8.rubyforge.org/en/HowToInstall.html 
* http://ruby-oci8.rubyforge.org/en/ReportInstallProblem.html 



Gem files will remain installed in /home/ubuntu/.rvm/gems/ruby-1.9.3-p448/gems/ruby-oci8-2.1.5 for inspection. 
Results logged to /home/ubuntu/.rvm/gems/ruby-1.9.3-p448/gems/ruby-oci8-2.1.5/ext/oci8/gem_make.out 

An error occurred while installing ruby-oci8 (2.1.5), and Bundler cannot continue. 
Make sure that `gem install ruby-oci8 -v '2.1.5'` succeeds before bundling. 

我做了一切從約每個網站和論壇(特別是從這裏)。這一個我覺得是最接近的... http://jigyasamakkar.com/ruby-oci8-with-rails-3-1-on-ubuntu/

什麼是解決這個問題的最好方法?

+0

我試圖找出如何安裝它。 這很奇怪,但它看起來像你需要有oracle數據庫實際安裝在客戶端上!如果發現奇怪。 您的錯誤: 錯誤消息: 無法從sqlplus獲得Oracle版本 似乎指向這一點。在提到的解決方案的鏈接中,他還提到了Oracle安裝。在這方面沒有很好的解釋 - >「它應該被設置到你的Oracle的安裝位置」 –

回答

5

我最近不得不安裝oracle + ruby​​ gem,這裏是mac的說明(但對ubuntu工作也一樣)。完整說明是在:

http://blog.codiez.co.za/2013/09/setup-oracle-instant-client-ruby-oci8-gem-mac/

的關鍵是紅寶石OCI寶石需要知道動態庫的存儲位置。 Ubuntu的需要設置:LD_LIBRARY_PATH

抓住以下文件:

  • instantclient-basic-linux.x64-11.2.0.3.0.zip
  • instantclient-sqlplus中,linux.x64-11.2 .0.3.0.zip
  • instantclient-sdk-linux.x64-11.2.0.3.0.zip

提取出來,把他們的地方,然後添加以下環境變量。請參閱鏈接瞭解詳細說明。

export ORACLE_BASE=/usr/local/oracle 
export ORACLE_HOME=$ORACLE_BASE/product/instantclient_64/11.2.0.3.0 
export PATH=$ORACLE_HOME/bin:$PATH 
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$DYLD_LIBRARY_PATH 
export TNS_ADMIN=$ORACLE_BASE/admin/network 

環境變量的說明:

ORACLE_BASE:,所有的文件都存儲 ORACLE_HOME:實際客戶端的路徑 LD_LIBRARY_PATH:應指向的lib目錄下,使確定你在這裏提取了SDK zip文件 TNS_ADMIN:在哪裏可以找到你的TNS_ADMIN文件(對於ruby-oci gem來說不是必需的)

+0

謝謝,這將有助於所有跨平臺的人! – harmonickey

+0

我不得不在$ ORACLE_HOME中做一些調整:'ln -s sdk/include include''n -s。 lib''ln -s libclntsh.dylib.11.1 libclntshdylib' – aceofspades

+0

我不知道這是Linux還是Mac的事情,或者如果文件名已經改變,但對於我來說,使用Linux Mint和Instant Client 11.2,'mv * dylib */usr/local/oracle/product/instantclient_64/11.2.0.3.0/lib /'(來自上面鏈接的「codiez」博客帖子)不起作用。我最終意識到我需要將該行更改爲'mv * so */usr/local/oracle/product/instantclient_64/11.2.0.3.0/lib /'。 – pjd

2

對於ruby-oci8的工作,在我們使用時安裝即時客戶端,即時客戶端SDK和sqlplus即時客戶端很重要。這是一個很好的工具,具有:)

我能在網上找到的最好的資源(就像一個魅力)是help.ubuntu.com所以一個好的權威的資源:

https://help.ubuntu.com/community/Oracle%20Instant%20Client

它使用RPM安裝可以通過外星人完成的即時客戶端。無論如何,它都在那裏解釋。

要使OCI連接到您的代碼中,請配置TNS_ADMIN環境變量。我把它放在Ubuntu社區解決方案中提到的同一個地方(在ORACLE_HOME配置的同一個地方)。我使用與oracle rdbms通常一樣的文件夾標準:network/admin。

這對我來說是: 須藤六/etc/profile.d/oracle.sh 出口ORACLE_HOME =/usr/lib目錄/ ORACLE/11.1.0.1 /客戶端 出口TNS_ADMIN =/usr/lib目錄/ ORACLE /網絡/ admin

然後把你的tnsnames.ora放入TNS_ADMIN文件夾中。

一旦完成,只需安裝寶石。

寶石會拋出一些錯誤/警告,但它們不是很重要,它仍然有效。 重新啓動會話以獲取環境變量。

+0

其實我的解決方案最終是安裝客戶端和SDK。然後指出oci8 gem install通過其選項指向客戶端和sdk。它最終需要sdk,因爲它找不到oci.h文件。 – harmonickey

+0

我想我找到了最好的資源來獲取即時客戶端=] 我需要完全修改我的答案=] –