Heroku использует неверную версию рейка (0.9.0 вместо 0.8.7) - PullRequest
4 голосов
/ 26 мая 2011

У меня есть приложение Rails 2.3.11, работающее на Heroku. Тем не менее, грабли больше не работают на Heroku:

rake aborted!
You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.

Грабли отлично работают локально. Я указал рейк 0.8.7 в моем Gemfile:

gem 'rake', '0.8.7'

Мой файл Gemfile.lock является частью моего репозитория git (не gitignored). Я проверил свой Gemfile.lock в поисках упоминаний о рейке 0.9.0, но не смог найти ни одного.

Похоже, что Heroku хранит копию рейка 0.9.0, но я не могу найти способ от нее избавиться. Вот полный след:

$ heroku rake -T --trace
rake aborted!
You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.
/usr/ruby1.8.7/lib/ruby/gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:27:in `setup'
/usr/ruby1.8.7/lib/ruby/gems/1.8/gems/bundler-1.0.7/lib/bundler/spec_set.rb:12:in `each'
/usr/ruby1.8.7/lib/ruby/gems/1.8/gems/bundler-1.0.7/lib/bundler/spec_set.rb:12:in `each'
/usr/ruby1.8.7/lib/ruby/gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:17:in `setup'
/usr/ruby1.8.7/lib/ruby/gems/1.8/gems/bundler-1.0.7/lib/bundler.rb:100:in `setup'
/app/config/../config/preinitializer.rb:16
/app/config/boot.rb:28:in `load'
/app/config/boot.rb:28:in `preinitialize'
/app/config/boot.rb:10:in `boot!'
/app/config/boot.rb:124
/usr/ruby1.8.7/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
/usr/ruby1.8.7/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
/app/Rakefile:4
/app/.bundle/gems/ruby/1.8/gems/rake-0.9.0/lib/rake/rake_module.rb:25:in `load'
/app/.bundle/gems/ruby/1.8/gems/rake-0.9.0/lib/rake/rake_module.rb:25:in `load_rakefile'
/app/.bundle/gems/ruby/1.8/gems/rake-0.9.0/lib/rake/application.rb:495:in `raw_load_rakefile'
/app/.bundle/gems/ruby/1.8/gems/rake-0.9.0/lib/rake/application.rb:78:in `load_rakefile'
/app/.bundle/gems/ruby/1.8/gems/rake-0.9.0/lib/rake/application.rb:129:in `standard_exception_handling'
/app/.bundle/gems/ruby/1.8/gems/rake-0.9.0/lib/rake/application.rb:77:in `load_rakefile'
/app/.bundle/gems/ruby/1.8/gems/rake-0.9.0/lib/rake/application.rb:61:in `run'
/app/.bundle/gems/ruby/1.8/gems/rake-0.9.0/lib/rake/application.rb:129:in `standard_exception_handling'
/app/.bundle/gems/ruby/1.8/gems/rake-0.9.0/lib/rake/application.rb:59:in `run'
/app/.bundle/gems/ruby/1.8/gems/rake-0.9.0/bin/rake:31
/usr/ruby1.8.7/bin/rake:19:in `load'
/usr/ruby1.8.7/bin/rake:19

Похоже, проблема описана в приведенном ниже вопросе, но я бы не стал создавать новое приложение, как это сделал этот человек:

Gem не удаляется в Heroku

Ответы [ 4 ]

3 голосов
/ 27 мая 2011

Проблема возникла из-за спорма в моей группе: test. Техническая поддержка Heroku была полезна и направила меня к Bundler. Я обнаружил эту проблему с Bundler на GitHub , которая оказалась не проблемой с Bundler, а на самом деле проблема в spork . По какой-то причине spork принудительно устанавливает rake и не указывает ограничение версии, поэтому он просто использует самую последнюю версию (0.9.0 на данный момент).

Моим решением было исключить группы: test и: для разработчиков на Heroku, чтобы запретить включение spork в мой комплект (spork используется только в тестовой среде, но я пошел дальше и исключил: разработку также для хорошей меры ):

$ heroku config:add BUNDLE_WITHOUT="development:test"

После переустановки моего пакета на Heroku, мои грабли снова работают.

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

Я справился с этим, установив старую версию Rake в качестве драгоценного камня.Таким образом, мое приложение использует версию рейка, которую оно может использовать.В моем gemfile:

gem 'rake', '~> 0.8.7'
0 голосов
/ 27 мая 2011

Я не уверен точно во внутренних частях heroku, но даю 'heroku bundle exec rake -T --trace', которая должна загрузить встроенную версию rake.

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

Попробуйте выполнить шаги Андрей дал в этом сообщении

=== РЕДАКТИРОВАТЬ ===

Извините, это не сработало. Полагаю, у вас остался только один вариант: отправить билет сотрудникам Heroku

...