Snow Leopard和Ruby on Rails – SQLite3问题

我刚升级到雪豹。 以前,我把一切都运行得很好,但现在当我从终端启动服务器时,我得到:

=> Booting WEBrick => Rails 2.3.3 application starting on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server [2009-08-28 23:18:19] INFO WEBrick 1.3.1 [2009-08-28 23:18:19] INFO ruby 1.8.7 (2008-08-11) [universal-darwin10.0] [2009-08-28 23:18:19] INFO WEBrick::HTTPServer#start: pid=845 port=3000 

然后当我开始生成页面时,似乎它不能与sqlite3一起使用。 我该如何解决? 这是当我进入脚本化视图页面时服务器打印出来的内容:

 /!\ FAILSAFE /!\ Fri Aug 28 23:18:34 -0400 2009 Status: 500 Internal Server Error uninitialized constant SQLite3::Driver::Native::Driver::API /Library/Ruby/Gems/1.8/gems/activesupport-2.3.3/lib/active_support/dependencies.rb:105:in `const_missing' /Library/Ruby/Gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/driver/native/driver.rb:76:in `open' /Library/Ruby/Gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/database.rb:76:in `initialize' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/sqlite3_adapter.rb:13:in `new' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/sqlite3_adapter.rb:13:in `sqlite3_connection' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:223:in `send' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:223:in `new_connection' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:245:in `checkout_new_connection' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:188:in `checkout' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:184:in `loop' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:184:in `checkout' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:183:in `checkout' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:98:in `connection' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:326:in `retrieve_connection' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:123:in `retrieve_connection' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:115:in `connection' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/query_cache.rb:9:in `cache' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/query_cache.rb:28:in `call' /Library/Ruby/Gems/1.8/gems/activerecord-2.3.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:361:in `call' /Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/head.rb:9:in `call' /Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/methodoverride.rb:24:in `call' /Library/Ruby/Gems/1.8/gems/actionpack-2.3.3/lib/action_controller/params_parser.rb:15:in `call' /Library/Ruby/Gems/1.8/gems/actionpack-2.3.3/lib/action_controller/session/cookie_store.rb:93:in `call' /Library/Ruby/Gems/1.8/gems/actionpack-2.3.3/lib/action_controller/reloader.rb:29:in `call' /Library/Ruby/Gems/1.8/gems/actionpack-2.3.3/lib/action_controller/failsafe.rb:26:in `call' /Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/lock.rb:11:in `call' /Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/lock.rb:11:in `synchronize' /Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/lock.rb:11:in `call' /Library/Ruby/Gems/1.8/gems/actionpack-2.3.3/lib/action_controller/dispatcher.rb:106:in `call' /Library/Ruby/Gems/1.8/gems/rails-2.3.3/lib/rails/rack/static.rb:31:in `call' /Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/urlmap.rb:46:in `call' /Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/urlmap.rb:40:in `each' /Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/urlmap.rb:40:in `call' /Library/Ruby/Gems/1.8/gems/rails-2.3.3/lib/rails/rack/log_tailer.rb:17:in `call' /Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/content_length.rb:13:in `call' /Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/handler/webrick.rb:46:in `service' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/httpserver.rb:104:in `service' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/httpserver.rb:65:in `run' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/server.rb:173:in `start_thread' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/server.rb:162:in `start' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/server.rb:162:in `start_thread' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/server.rb:95:in `start' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/server.rb:92:in `each' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/server.rb:92:in `start' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/server.rb:23:in `start' /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/webrick/server.rb:82:in `start' /Library/Ruby/Gems/1.8/gems/rack-1.0.0/lib/rack/handler/webrick.rb:13:in `run' /Library/Ruby/Gems/1.8/gems/rails-2.3.3/lib/commands/server.rb:111 /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `gem_original_require' /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require' script/server:3 

如果您从Leopard升级,那么您将需要重新安装sqlite3-ruby gem。 首先安装XCode,然后运行:

 sudo gem install sqlite3-ruby 

如果从XCode安装程序安装UNIX Dev Tools,则应包含必要的头文件(ruby.h)。

sudo port install sqlite3 sudo gem install sqlite3-ruby

您应该从Snow Leopard DVD重新安装XCode。 这应该解决链接问题!

我刚遇到这个问题。 这就是我最终做的事情:

rm -fr~ / .gem
sudo gem install rails
sudo gem install sqlite3-ruby

现在我的rails / sqlite3应用程序再次运行。

导致此问题的另一个可能原因是在升级到Snow Leopard之后继续在Leopard上使用随rvm( http://rvm.beginrescueend.com/ )安装的Ruby版本。

安装了rvm的Ruby版本是从源代码构建的,需要在Snow Leopard上重新安装才能使用sqlite3-ruby gem。

我有一个类似的问题。 如果查看堆栈回溯,可以看到抛出错误的文件在sqlite-ruby本身内:

 def open( filename, utf16=false ) API.send( utf16 ? :sqlite3_open16 : :sqlite3_open, filename ) end 

所以缺少API类。 在此文件的顶部是以下代码,该代码表明API类来自于要求sqlite3_api文件:

 begin require 'sqlite3_api' rescue LoadError if RUBY_PLATFORM =~ /mingw|mswin/ then RUBY_VERSION =~ /(\d+.\d+)/ require "#{$1}/sqlite3_api" end end 

如您所见,此代码将忽略除mingw / mswin之外的平台上的LoadError。 这很糟糕,我会考虑sqlite3-ruby gem中的一个bug。 要弄清楚什么是错的,请尝试在irb中使用sqlite3_api:

 $ irb irb(main):001:0> require 'sqlite3_api' LoadError: Unable to find library 'libsqlite3.so.8'. - /path/to/ruby/lib/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5/lib/sqlite3_api.sl from (irb):1:in `require' from (irb):1 from /path/to/ruby/bin/irb:12:in `
' irb(main):002:0>

YMMV,但对我来说,我意识到我在共享库路径中遗漏了一些东西。 一旦我纠正了,一切都有效。

出于某种原因,这对我来说效果不佳。

我必须从头开始,遵循以下指示:来自“设置”阶段的http://hivelogic.com/articles/ruby-rails-leopard 。

  • 安装XCode
  • 下载Ruby 1.8.7
  • 重新编译和安装(我认为这是我失踪的神奇步骤)
  • 下载Rubygems 1.3.5(1.3.6有一些我不想处理的东西已被弃用)
  • 重新编译并安装Rubygems
  • 然后卸载sqlite3:sudo gem uninstall sqlite3-ruby
  • 重新安装:sudo gem install sqlite3-ruby

为了清楚起见,我尝试了上述步骤。 我尝试安装XCode。 我尝试重新编译Rubygems …只有当我重新编译Ruby本身时,然后重新编译Rubygems,然后卸载并重新安装sqlite3-ruby就可以清理它了。

我希望这有帮助。

我已经完成了所有这些……唯一对我有用的是

 sudo env ARCHFLAGS="-arch x86_64" gem install sqlite3-ruby 

注意:我确实从devloper.apple.com安装了XCode,而不是CD。 XCode Tools的CD安装没有为我解决这个问题。

如果您没有安装任何XCode,则可能需要从http://developer.apple.com/xcode获取XCode 3或4。 您需要注册一个帐户。 目前,您可以免费下载XCode 3而无需支付99美元的年费。