1

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

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

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

历史
我通过使用 FW 电缆将我的应用程序从旧的 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..下载->配置->制作->制作安装。之后,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 从 /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/database.rb:76:in 'initialize' 打开'const_missing'
from /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/driver/native/driver.rb:76:in

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

我能做些什么来解决这个问题?

4

5 回答 5

5

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

在升级到 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'

好吧,事实上这很有效,我的红宝石找到了图书馆。那么为什么它不能从设置中工作呢?仔细检查 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​​ 应用程序。工作正常。

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

冰淇淋

于 2010-08-26T11:12:58.637 回答
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 install gem1 gem2 ... gemN --no-ri --no-rdoc

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

终于一切都重新开始了!

于 2009-12-28T14:24:56.463 回答
0

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

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

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

雪豹,sqlite3-ruby

关于 ln 命令的答案似乎解决了我的问题。希望对你也有帮助。

于 2009-12-26T10:10:26.753 回答
0

如果 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 开发人员工具。

于 2009-12-26T14:48:39.447 回答
0

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

sudo port install rb-sqlite3 +universal
于 2010-05-13T17:17:58.950 回答