Snow Leopard и Ruby on Rails - проблема SQLite3 - PullRequest
4 голосов
/ 29 августа 2009

Я только что перешел на снежного барса. Раньше у меня все работало нормально, но теперь, когда я запускаю сервер из терминала, я получаю:

=> 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

Ответы [ 9 ]

10 голосов
/ 29 августа 2009

Если вы обновились с Leopard, вам нужно будет переустановить гем sqlite3-ruby. Сначала установите XCode, затем запустите:

sudo gem install sqlite3-ruby
2 голосов
/ 30 августа 2009

если вы устанавливаете UNIX Dev Tools из установщика XCode, это должно включать необходимые заголовочные файлы (ruby.h).

1 голос
/ 14 ноября 2009

порт sudo установить sqlite3 sudo gem install sqlite3-ruby

0 голосов
/ 01 мая 2011

Я сделал все это ... единственное, что сработало для меня, это

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

Примечание. У меня установлен XCode с devloper.apple.com, а не с компакт-диска. Установка CD с XCode Tools не помогла мне решить эту проблему.

Если у вас не установлен XCode, вам может потребоваться получить XCode 3 или 4 из http://developer.apple.com/xcode.. Вам нужно будет зарегистрировать учетную запись. В настоящее время вы можете бесплатно загрузить XCode 3 без уплаты годового взноса в размере 99 долларов США.

0 голосов
/ 05 апреля 2010

По некоторым причинам, это не сработало для меня.

Я должен был начать с нуля, следуя этим инструкциям: http://hivelogic.com/articles/ruby-rails-leopard со стадии «Настройка».

  • Установить XCode
  • Скачать Ruby 1.8.7
  • Перекомпилируйте и установите (я думаю, что это был волшебный шаг, который я пропустил)
  • Скачать Rubygems 1.3.5 (в версии 1.3.6 устарели некоторые вещи, с которыми я не хотел иметь дело)
  • Перекомпилируйте и установите Rubygems
  • ТО, удалите sqlite3: sudo gem удалите sqlite3-ruby
  • Переустановите его: sudo gem install sqlite3-ruby

Чтобы было понятно, я попробовал шаги выше. Я попытался установить XCode. Я попытался перекомпилировать Rubygems ... Только когда я перекомпилировал Ruby, THEN Rubygems, THEN, удалили и переустановили sqlite3-ruby, все прояснилось.

Надеюсь, это поможет.

0 голосов
/ 15 февраля 2010

У меня была похожая проблема. Если вы посмотрите на трассировку стека, вы увидите, что файл, выдавший ошибку, находится внутри самого 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

Как видите, этот код будет игнорировать ошибку LoadError на платформах, отличных от mingw / mswin. Это плохо, и я бы посчитал это ошибкой в ​​геме sqlite3-ruby. Чтобы выяснить, в чем дело, попробуйте использовать sqlite3_api в irb:

$ 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 `<main>'
irb(main):002:0>

YMMV, но для себя я понял, что чего-то не хватает в моем пути к общей библиотеке. Как только я это исправил, все заработало.

0 голосов
/ 02 декабря 2009

Другой возможной причиной этой проблемы является продолжение использования версий Ruby, установленных с rvm (http://rvm.beginrescueend.com/) на Leopard после обновления до Snow Leopard.

Версии Ruby, установленные с rvm, собраны из исходного кода и должны быть переустановлены на Snow Leopard для работы с гемом sqlite3-ruby.

0 голосов
/ 03 сентября 2009

Я только столкнулся с этой проблемой. Вот что я в итоге сделал:

rm -fr ~ / .gem
sudo gem установить направляющие
sudo gem install sqlite3-ruby

Теперь мое приложение rails / sqlite3 снова запущено.

0 голосов
/ 30 августа 2009

Вам следует переустановить XCode с DVD-диска Snow Leopard. Это должно исправить проблему с соединением!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...