Rails - ошибка компоновщика при использовании thin - PullRequest
5 голосов
/ 24 октября 2010

Я начал использовать bundler, и у меня возникли некоторые проблемы с его работой. У меня есть следующий гемфайл:

source "http://rubygems.org"
gem "rack", "~>1.1"
gem 'pg','>= 0.8.0'
gem 'rails','2.3.8'
gem 'authlogic','2.1.3'
gem 'ajaxful_rating','2.2.3'
gem 'will_paginate','2.3.12'
gem 'right_aws','1.10.0'
gem 'aws-s3','0.6.2'
gem 'declarative_authorization','0.4.1'
gem 'timeline_fu','0.3.0'
gem 'friendly_id','>= 3.1'

Обратите внимание, что я хочу использовать стойку 1.1 (1.1.0).

Я получаю следующую ошибку при запуске с thin (Webrick работает нормально):

thin start
>> Using rails adapter
/usr/lib/ruby/gems/1.8/gems/bundler-1.0.3/lib/bundler/runtime.rb:27:in `setup': You have already activated rack 1.2.1, but your Gemfile requires rack 1.1.0. Consider using bundle exec. (Gem::LoadError)
 from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.3/lib/bundler/spec_set.rb:12:in `each'
 from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.3/lib/bundler/spec_set.rb:12:in `each'
 from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.3/lib/bundler/runtime.rb:17:in `setup'
 from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.3/lib/bundler.rb:100:in `setup'
 from /home/vmplanet/Documents/maga/config/../config/preinitializer.rb:16
 from /home/vmplanet/Documents/maga/config/boot.rb:28:in `load'
 from /home/vmplanet/Documents/maga/config/boot.rb:28:in `preinitialize'
 from /home/vmplanet/Documents/maga/config/boot.rb:10:in `boot!'
 from /home/vmplanet/Documents/maga/config/boot.rb:126
 from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
 from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
 from /home/vmplanet/Documents/maga/config/environment.rb:7
 from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
 from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/rack/adapter/rails.rb:42:in `load_application'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/rack/adapter/rails.rb:23:in `initialize'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/rack/adapter/loader.rb:48:in `new'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/rack/adapter/loader.rb:48:in `for'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/thin/controllers/controller.rb:163:in `load_adapter'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/thin/controllers/controller.rb:67:in `start'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/thin/runner.rb:177:in `send'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/thin/runner.rb:177:in `run_command'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/thin/runner.rb:143:in `run!'

Так что, в основном, я жалуюсь на то, что я использую стойку 1.2.1 (это не так, я не могу думать ни о чем, используя ее).

Есть мысли?

Ответы [ 4 ]

6 голосов
/ 24 октября 2010

Тонкий сам зависит от стойки.И поскольку Thin будет загружаться сам перед тем, как загружать ваше приложение, самая последняя версия Rack будет загружена уже при первом входе в упаковщик.

Вы должны принудительно установить правильную версию Rack в Thin.Теоретически в вашей системе может быть только Rack 1.1.0, но это вряд ли можно обслуживать или переносить.Сообщение об ошибке уже содержит ответ;используйте bundle exec.

bundle exec thin start
2 голосов
/ 04 июня 2014

Так что, в основном, я жалуюсь на то, что я использую стойку 1.2.1 (это не так, я не могу думать ни о чем, используя ее).

Я тоже так думалвещь, но это так.Rubygems использует последнюю версию.Bundler позволяет вам переопределить это значение по умолчанию, используя

bundle exec foo

Когда вы устанавливаете гем в систему, Rubygems создает оболочки для каждого исполняемого файла, доступного для гема.Когда вы запускаете исполняемый файл из командной строки без комплекта exec, эта оболочка вызывает Rubygems, который затем использует обычный механизм активации Rubygems для вызова исполняемого файла gem.Это изменилось за последние несколько месяцев, но Rubygems будет вызывать последнюю версию гема, установленного в вашей системе, даже если в вашем Gemfile.lock указана другая версия.Кроме того, он активирует последнюю (совместимую) установленную версию зависимостей этого гема, даже если в вашем Gemfile.lock указана другая версия. источник

0 голосов
/ 24 апреля 2012
0 голосов
/ 12 июля 2011

Вы можете найти информацию на сайте heroku об использовании thin. Также они рекомендуют использовать тонкий. http://devcenter.heroku.com/articles/rails3#webserver

...