Rails - ошибка упаковщика при использовании тонкого

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

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).

Я получаю следующую ошибку при работе с тонкими (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 (это не так, я ничего не могу придумать, используя ее).

Есть предположения?


person user296489    schedule 23.10.2010    source источник


Ответы (4)


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

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

bundle exec thin start
person molf    schedule 24.10.2010
comment
Я не могу помочь вам с Heroku, возможно, поможет их документация по сборщикам: docs.heroku.com/bundler - person molf; 24.10.2010
comment
Я не понимаю, почему стойка 1.2.1 используется по умолчанию. Разве весь смысл упаковщика не в том, чтобы указать, какие версии драгоценных камней следует использовать? Я понимаю, что должна быть некоторая начальная загрузка стойки, но почему бы не сделать автоматическую перезагрузку до стойки 1.1.0, если это то, что определено. - person user296489; 24.10.2010
comment
Невозможно выгрузить драгоценный камень; поэтому, если Bundler не загружается первым, он никак не может исправить несоответствие версии. Решение bundle exec, и это как раз причина его существования. - person molf; 25.10.2010
comment
Спасибо, Мольф, я понимаю, в основном сейчас для меня проблема состоит в том, чтобы выяснить, как заставить это работать на Heroku. Я не могу найти, как выполнить команду на Heroku. - person user296489; 25.10.2010

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

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

bundle exec foo

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

person Hei Matau    schedule 04.06.2014

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

person dombesz    schedule 11.07.2011

См. также эту полезную запись в блоге. .

person Michiel de Mare    schedule 24.04.2012