我得到了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中不起作用,在本文的顶部给出了错误。
我不确定从哪里开始,因为我尝试了以下
无济于事,我仍然收到此错误:
NameError:未初始化的常量SQLite3 :: Driver :: Native :: Driver :: AP
来自/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:105:inconst_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:in`initialize'
顺便说一下,我从Snow Leopard CD上安装了Xcode。
我该怎么做才能解决问题?
答案 0 :(得分: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应用程序。 工作正常。
希望这会对某人有所帮助。
冰淇凌
答案 1 :(得分:2)
感谢您的回答。以下是我为解决问题所做的工作:
将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
将sqlite3重新安装到/ usr / local
使用sudo gem install XXX重建系统上的所有gem,包括sqlite3-ruby。这只适用于平台特定的宝石,但我发现只需将所有内容安装在oneliner中就更快:
sudo gem install gem1 gem2 ... gemN --no-ri --no-rdoc
我尝试使用ruby1.9,但由于宝石和插件中的依赖性破坏,一切都停止了工作,因此我不建议切换到1.9,除非你需要进行一些繁重的调试并知道如何恢复旧系统!
最后一切都在运行!
答案 2 :(得分:0)
我在Don Park的博客上找到了一些关于此的指导:
http://blog.docuverse.com/2009/09/24/installing-sqlite3-ruby-gem-on-snow-leopard/
他的解决方案在以下主题中指向Stack Overflow:
关于ln命令的答案似乎解决了我的问题。希望它也能帮到你。
答案 3 :(得分: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 Developer Tools。
答案 4 :(得分:0)
对于那些使用Snow Leopard 64并且安装此macport时出现此问题的人来说,我已经解决了这个问题。
sudo port install rb-sqlite3 +universal