Heroku使用错误版本的rake(0.9.0而不是0.8.7)

时间:2011-05-26 18:23:36

标签: ruby-on-rails heroku rake bundler

我在Heroku上运行了一个Rails 2.3.11应用程序。但是,rake任务不再适用于Heroku:

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

Rake在当地运作良好。我在我的Gemfile中指定了rake 0.8.7:

gem 'rake', '0.8.7'

我的Gemfile.lock文件是我的git repo(不是gitignored)的一部分。我检查了我的Gemfile.lock,寻找rake 0.9.0的提及,但找不到任何。

看起来Heroku正在保留rake 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 not uninstalling on Heroku

4 个答案:

答案 0 :(得分:3)

问题起源于我的测试组中的spork gem。 Heroku的技术支持很有帮助,并指导我对Bundler。我找到this Bundler issue on GitHub,结果证明Bundler不是问题,但实际上是an issue in spork。出于某种原因,spork force rake安装并且没有指定版本约束,因此它只使用最新版本(截至目前为0.9.0)。

我的解决方案是排除了Heroku上的:test和:开发组,以防止spork被包含在我的捆绑中(spork仅用于测试环境,但我继续排除:开发也是如此,为了好的衡量标准):

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

在Heroku上重新安装我的捆绑包后,我的rake任务再次运行。

答案 1 :(得分:0)

尝试按照 Andrei 在此post

中提供的步骤进行操作

===编辑===

抱歉它不起作用。我想您只剩下一个选项:send a ticket to Heroku staff

答案 2 :(得分:0)

我不确定heroku的内部确切但是给'heroku bundle exec rake -T --trace',它应该加载捆绑的rake版本。

答案 3 :(得分:0)

我通过安装旧版本的Rake作为宝石来解决这个问题。这样我的应用程序使用它可以使用的rake版本。在我的gemfile中:

gem 'rake', '~> 0.8.7'