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

时间:2009-12-23 13:36:05

标签: ruby-on-rails osx-snow-leopard sqlite3-ruby

我得到了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. 从最新来源(http://www.sqlite.org/download.html
  2. 重建sqlite3
  3. 重新安装sqlite3-ruby(sudo gem uninstall sqlite3-ruby&& sudo gem install sqlite3-ruby)
  4. 来自macports的sqlite3(sudo port install sqlite3&& sudo gem install sqlite3-ruby)
  5. 重新安装rails(sudo gem install rails sqlite3-ruby)并将environment.rb更新为rails 2.3.5。
  6. 无济于事,我仍然收到此错误:

      

    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
    打开'
       来自/usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/database.rb:76:in`initialize'

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

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

5 个答案:

答案 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)

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

  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。这只适用于平台特定的宝石,但我发现只需将所有内容安装在oneliner中就更快:

      

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

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

    最后一切都在运行!

答案 2 :(得分:0)

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

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

他的解决方案在以下主题中指向Stack Overflow:

Snow Leopard, sqlite3-ruby

关于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