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

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

名称错误:未初始化常量 SQLite3::Driver::Native::Driver::API

历史:
我通过使用固件电缆将我的应用程序从旧 MacBook 迁移到新 MacBook 来升级到雪豹。一切都完美运行了几个月,但昨天我需要安装 watir,它依赖于 rb-appscript,由于 libsqlite3.dylib 中的“错误架构”错误而没有构建。我认为构建是在旧机器上进行的,所以我想重建 sqlite3-ruby:

$ sudo gem 卸载 sqlite3-ruby

$ sudo gem 安装 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..下载->配置->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。

没有用,我仍然收到此错误:

名称错误:未初始化常量 SQLite3::Driver::Native::Driver::AP
来自 /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependency.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
打开'
来自 /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/database.rb:76: 在“初始化”中

顺便说一句,我已经从 Snow Leopard CD 安装了 Xcode。

我可以做什么来解决这个问题?

有帮助吗?

解决方案 2

感谢您的回答。这是我为解决问题所做的:

  1. 将 ruby​​1.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 安装 gem1 gem2 ...gemN --no-ri --no-rdoc

我尝试使用 ruby​​1.9,但由于 gems 和插件中的依赖关系被破坏,一切都停止工作,所以我不建议切换到 1.9,除非您准备进行一些繁重的调试并知道如何恢复旧系统!

终于一切又恢复正常了!

其他提示

我的问题略有不同,事实上我在网上找到的解决方案都不起作用。

升级到 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 正在使用

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

所以我启动了 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= 行之前尝试过,但它不起作用)

重新启动存在 sqlite 问题的 ruby​​ 应用程序。工作正常。

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

冰淇淋

我在 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 开发人员工具。

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

sudo port install rb-sqlite3 +universal
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top