雪豹升级 – >重新安装sqlite3-ruby gem问题

我得到了ruby 1.8.7(本机编译),rails 2.3.4,OSX 10.6.2以及sqlite3-ruby。

我访问rails应用程序时遇到的错误是

NameError:未初始化的常量SQLite3 :: Driver :: Native :: Driver :: API

历史
我通过使用FW-cable从我的旧macbook迁移我的应用程序升级到雪豹。 一切都运行了好几个月,但昨天我需要安装watir,这取决于rb-appscript,由于libsqlite3.dylib中的“错误的架构”错误而无法构建。 我认为构建是在旧机器上进行的,所以我想重建sqlite3-ruby:

$ sudo gem uninstall sqlite3-ruby

$ sudo gem install sqlite3-ruby

构建原生扩展。 这可能需要一段时间……
错误:安装sqlite3-ruby时出错:
错误:无法构建gem原生扩展。

/ usr / local / bin / ruby​​ extconf.rb
检查-lrt中的fdatasync()…否
检查sqlite3.h …是的
在-lsqlite3中检查sqlite3_open()…没有
* extconf.rb失败*
由于某些原因,可能无法创建Makefile
必要的库和/或标题。 检查mkmf.log文件以获取更多信息
细节。 您可能需要配置选项。

似乎sqlite3库不能正常工作。 我已经尝试安装macports sqlite3(sudo port install sqlite3)并使用它,但结果相同…所以我从头开始重建sqlite3 .. download-> configure-> make-> make install。 之后,gem现在构建完美,但在rails中不起作用,在本文的顶部给出了错误。

我不确定从哪里开始,因为我尝试了以下内容

  1. 从最新源重建sqlite3( http://www.sqlite.org/download.html )
  2. 重新安装sqlite3-ruby(sudo gem uninstall sqlite3-ruby && sudo gem install sqlite3-ruby)
  3. 使用来自macports的sqlite3(sudo port install sqlite3 && sudo gem install sqlite3-ruby)
  4. 重新安装rails(sudo gem install rails sqlite3-ruby)并将environment.rb更新到rails 2.3.5。

无济于事,我仍然得到这个错误:

NameError:未初始化的常量SQLite3 :: Driver :: Native :: Driver :: AP
来自/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
const_missing'
from /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/driver/native/driver.rb:76: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’
来自/usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/database.rb:76:in`initialize’

顺便说一下,我从Snow Leopard CD上安装了Xcode。

我该怎么做才能解决问题?

我的问题略有不同,实际上我找到的解决方案没有在线工作。

在升级到Snow Leopard和XCode 4.0试用版后尝试安装sqlite3-ruby时,我收到了消息

 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 install也应该告诉你这些内容:

 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我发现ruby正在检查sqlite3库使用

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

所以我解雇了irb并检查了为什么这不起作用:

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

嗯,事实上这是有效的,我的ruby找到了库。 那么为什么它不能在设置中起作用呢? 检查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 =行之前尝试过,但它没有用)

重新启动了有sqlite问题的ruby应用程序。 工作良好。

希望这会对某人有所帮助。

冰淇淋

谢谢你的回答。 以下是我为解决问题所做的工作:

  1. 完全重新安装ruby1.8.7到/ usr / local,请看这里: http ://hivelogic.com/articles/ruby-rails-leopard

    注意:在我的mac上重新编译ruby时,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 / local

  3. 使用sudo gem install XXX重建系统上的所有gem,包括sqlite3-ruby。 这仅适用于特定于平台的gem,但我发现只需在oneliner中安装所有内容即可:

    sudo gem install gem1 gem2 … gemN –no-ri –no-rdoc

我尝试使用ruby1.9,但由于gem和插件中的依赖性破坏,一切都停止了工作,所以我不建议切换到1.9,除非你需要进行一些繁重的调试并知道如何恢复旧系统!

最后一切都在运行!

我在Don Park的博客上找到了一些指导:

http://blog.docuverse.com/2009/09/24/installing-sqlite3-ruby-gem-on-snow-leopard/

他的解决方案直接指向以下线程中的Stack Overflow:

雪豹,sqlite3-ruby

关于ln命令的答案似乎已经解决了我的问题。 希望它也能帮到你。

如果gem没有构建它不是因为你需要从源代码重建sqlite3,但是为了构建gem你将需要sqlite3开发人员库。

在大多数Linux / Unix系统上,您可以通过执行’sudo apt-get install sqlite3-dev’来安装它们,但是我不确定它如何与Macports一起使用 – 但请确保您拥有该软件包。 你必须确保它们在你的路径中或者在安装gem时传递它们所在的目录(请参阅gem的输出以获取有关这样做的选项的提示)。

我的Mac上运行sqlite3就好了,1.8.7和现在我更新的1.9.1 Ruby。 您可能还想确保安装了XCode Developer Tools。

对于那些使用Snow Leopard 64并且安装此macport的问题,我解决了这个问题。

 sudo port install rb-sqlite3 +universal