2009-12-23 157 views
1

我得到了紅寶石1.8.7(本地編譯),軌2.3.4,OSX 10.6.2和sqlite3-ruby。雪豹升級 - >重新安裝sqlite3-ruby的寶石問題

訪問Rails應用程序時,我得到的錯誤是

NameError: uninitialized constant SQLite3::Driver::Native::Driver::API

歷史
我通過遷移我用FW-電纜的應用程序從我的舊的MacBook新升級到雪豹一。一切都完美運行了好幾個月,但昨天我需要安裝watir,它依賴於rb-appscript,由於libsqlite3.dylib中存在「錯誤的體系結構」錯誤而無法生成。我想通構建了舊機器上進行,所以我想重建sqlite3的,紅寶石:

$ sudo gem uninstall sqlite3-ruby

$ sudo gem install sqlite3-ruby

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

/usr/local/bin/ruby extconf.rb
checking for fdatasync() in -lrt... no
checking for sqlite3.h... yes
checking for sqlite3_open() in -lsqlite3... no
* 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.

這似乎是sqlite3的庫都不能正常工作。我已經嘗試安裝macports sqlite3(sudo port install sqlite3)並使用它來代替,但結果相同...所以我從零開始重建sqlite3 .. download-> configure-> make-> make install。之後,寶石現在完美地構建,但不能在rails中工作,因此在本文的頂部給出了錯誤。

我真的不知道在哪裏可以從這裏走,因爲我已經試過以下

  1. 從最新的源(http://www.sqlite.org/download.html
  2. 重新安裝sqlite3的,紅寶石(須藤寶石卸載的sqlite3 - 紅寶石sqlite3的重建& & sudo的創業板安裝的sqlite3-紅寶石)
  3. 從MacPorts的二手sqlite3的(sudo的港口安裝sqlite3的& & sudo的創業板安裝的sqlite3-紅寶石)
  4. 重新安裝了rails(sudo gem install rails sqlite3-ruby)並更新了environment.rb到rails 2.3.5。

無濟於事,我仍然得到這個錯誤:

NameError: uninitialized constant SQLite3::Driver::Native::Driver::AP
from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:105:in const_missing'
from /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/driver/native/driver.rb:76:in
open'
from /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/database.rb:76:in `initialize'

順便說一句,我有雪豹光盤安裝的Xcode。

我能做些什麼來解決這個問題?

回答

2

感謝您的答案。這裏是我做過什麼來解決這個問題:

  1. ruby​​1.8.7完全重新安裝到/ usr /地方,在這裏看到:http://hivelogic.com/articles/ruby-rails-leopard

    注:在我的Mac重新編譯紅寶石的readline時不工作,所以我不得不建立一個太從頭開始,並確保添加--with-的readline-dir選項來配置:

    ./configure --enable-shared --enable-pthread CFLAGS=-D_XOPEN_SOURCE=1 --prefix=/usr/local --with-readline-dir=/usr/local

  2. sqlite3的完全重新安裝到/ usr /本地

  3. 使用sudo gem install XXX重建系統上的所有gem,包括sqlite3-ruby。這是隻與特定平臺的寶石必要的,但我發現它是更快只是在一個oneliner進行安裝:

    sudo gem install gem1 gem2 ... gemN --no-ri --no-rdoc

我試着去與ruby1.9但一切都停止了工作,由於打破依賴在寶石和插件中,所以我不建議切換到1.9,除非你需要進行大量的調試並知道如何恢復舊系統!

終於一切都再次運行!

+0

如何將sqlite3安裝到特定目錄? – CodingWithoutComments 2010-01-26 17:50:44

0

如果gem沒有構建,那不是因爲你需要從源碼重建sqlite3,而是爲了構建gem,你需要sqlite3開發庫。

在大多數Linux/Unix系統上,您可以通過執行'sudo apt-get install sqlite3-dev'來安裝它們,但是我不確定它是如何與Macports一起使用的 - 但要確保您擁有該軟件包。您必須確保它們在您的路徑中,或者在安裝gem時通過它們所在的目錄(請參閱gem的輸出以獲取有關此操作的提示)。

我有我的Mac上運行的sqlite3很好,都與1.8.7和現在我更新的1.9.1紅寶石。您可能還想確保安裝了XCode Developer Tools。

0

對於那些在雪豹64和有這個問題安裝此macport固定的問題給我。

sudo port install rb-sqlite3 +universal 
5

我的問題稍有不同,實際上我在網上發現的解決方案都不起作用。

當試圖升級到雪豹的XCode 4.0試用後安裝sqlite3的,紅寶石,我得到的消息

checking for sqlite3.h... yes 
checking for sqlite3_libversion_number() in -lsqlite3... no 
sqlite3 is missing. Try 'port install sqlite3 +universal' or 'yum install sqlite3-devel' 

但sqlite3的安裝,並重新安裝沒有幫助。我已經習慣了64位和通用版本,但我已經清除了。實際上,我可以使用sqlite3。

所以創業板安裝也應該告訴你這些方針的東西:

Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/sqlite3-ruby-1.3.1 for inspection. 

所以CD到該目錄,並有尋找extconf.rb,我的是在./ext/sqlite3/extconf.rb 我發現紅寶石是檢查使用

asplode('sqlite3') unless find_library 'sqlite3', 'sqlite3_libversion_number' 

的sqlite3的在庫所以我解僱了IRB和檢查爲什麼這不工作:

require 'mkmf' 
    find_library 'sqlite3', 'sqlite3_libversion_number' 

那麼,實際上這工作,我的紅寶石找到圖書館。 那麼爲什麼它不從設置工作? 檢查extconf。RB密切呈現以下行:

sqlite = dir_config('sqlite3', ['/usr/local', '/opt/local', '/usr']) 

當我在IRB執行此:

require 'mkmf' 
    sqlite = dir_config('sqlite3', ['/usr/local', '/opt/local', '/usr']) 
    find_library 'sqlite3', 'sqlite3_libversion_number' 

我會出奇找不到庫了。事實上,我不明白這是怎麼回事,但那就是發生了什麼。

因此,這是治癒:出列

sqlite = dir_config('sqlite3', ['/usr/local', '/opt/local', '/usr']) 

在extconf.rb 評論

然後從/Library/Ruby/Gems/1.8/gems/sqlite3-ruby-1.3.1我發出

sudo ruby ./setup.rb 

這種經歷了,沒有任何問題(我註釋掉源碼=行前試過了,沒用)

重新啓動了有sqlite問題的ruby應用程序。 工作正常。

希望這會幫助別人。

冰淇淋

+0

是的!這是答案。非常感謝! – 2011-05-30 10:35:57