Heroku使用错误版本的rake0.9.0代替0.8.7

问题描述

| 我在Heroku上运行了Rails 2.3.11应用程序。但是,耙任务在Heroku上不再起作用:
rake aborted!
You have already activated rake 0.9.0,but your Gemfile requires rake 0.8.7. Consider using bundle exec.
耙子在本地工作正常。我在Gemfile中指定了rake 0.8.7:
gem \'rake\',\'0.8.7\'
我的Gemfile.lock文件是我的git仓库(不是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
看起来像下面问题中描述的问题,但是我不想像这个人最终那样创建一个新的应用程序: 宝石未在Heroku上卸载     

解决方法

问题出在我的:test组中的spork gem。 Heroku的技术支持很有帮助,并引导我转向Bundler。我在GitHub上发现了这个Bundler问题,原来不是Bundler的问题,而是spork的问题。由于某些原因,spork会强制安装rake,并且未指定版本限制,因此它仅使用最新版本(截至目前为0.9.0)。 我的解决方案是排除Heroku上的:test和:development组,以防止spork包含在我的捆绑包中(spork仅在测试环境中使用,但是我继续排除了:development,这也是很好的措施):
$ heroku config:add BUNDLE_WITHOUT=\"development:test\"
在Heroku上重新安装我的捆绑软件后,我的rake任务再次起作用。     ,我不确定确切在heroku的内部,但是给\'heroku bundle exec rake -T --trace \',它应该加载捆绑的rake版本。     ,尝试遵循Andrei在这篇文章中给出的步骤 ===编辑=== 对不起,它没有用。我想您只剩下一个选择:将票发送给Heroku工作人员     ,通过安装较旧版本的Rake作为gem来解决此问题。这样,我的应用程序将使用它可以使用的rake版本。在我的gemfile中:
gem \'rake\',\'~> 0.8.7\'