我在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
这看起来像下面问题中描述的问题,但我宁愿不创建像这个人最终做的新应用程序:
答案 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)
答案 2 :(得分:0)
我不确定heroku的内部确切但是给'heroku bundle exec rake -T --trace',它应该加载捆绑的rake版本。
答案 3 :(得分:0)
我通过安装旧版本的Rake作为宝石来解决这个问题。这样我的应用程序使用它可以使用的rake版本。在我的gemfile中:
gem 'rake', '~> 0.8.7'