【问题标题】:Heroku using wrong version of rake (0.9.0 instead of 0.8.7)Heroku 使用错误版本的 rake(0.9.0 而不是 0.8.7)
【发布时间】:2011-09-02 20:26:27
【问题描述】:

我有一个在 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

【问题讨论】:

    标签: ruby-on-rails heroku rake bundler


    【解决方案1】:

    问题源于我的 :test 组中的 spork gem。 Heroku 的技术支持很有帮助,并将我引向了 Bundler。我找到了this Bundler issue on GitHub,原来这不是Bundler 的问题,而是an issue in spork。出于某种原因,spork 强制安装 rake 并且没有指定版本约束,因此它只使用最新版本(截至目前为 0.9.0)。

    我的解决方案是排除 Heroku 上的 :test 和 :development 组,以防止 spork 包含在我的捆绑包中(spork 仅在测试环境中使用,但我继续排除 :development 为好措施):

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

    在 Heroku 上重新安装我的包后,我的 rake 任务再次工作。

    【讨论】:

    • 你如何在 heroku 上重新安装你的包?我只是按照你的建议做了,并将我的应用程序重新推送到 heroku,但我的 rake 仍然不起作用......
    • @Alex:确保在推送应用时看到Unresolved dependencies detected; Installing... 行。否则,您的捆绑软件不会被重新安装。不过,我不确定是否有办法在不更改 Gemfile 的情况下强制重新安装捆绑包。
    • 感谢 Etienne,我在此期间联系了 Heroku,他们清除了我的 gem,下次我推送它时,它重新安装了所有东西,但它没有工作(在我添加了 bundle_without 选项之后)。
    【解决方案2】:

    我不确定 heroku 的内部结构,但给出“heroku bundle exec rake -T --trace”,它应该加载捆绑的 rake 版本。

    【讨论】:

    • 很遗憾,您无法在 Heroku 上运行 bundle exec。
    【解决方案3】:

    尝试按照 Andrei 在此 post

    中给出的步骤进行操作

    === 编辑 ===

    抱歉,没用。我猜你只剩下一个选择了:send a ticket to Heroku staff

    【讨论】:

    • 不幸的是,这些说明在 Heroku 上不起作用,因为(据我所知)无法像在普通机器上那样手动卸载 gem。
    【解决方案4】:

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

    gem 'rake', '~> 0.8.7'
    

    【讨论】:

    • 这通常是一个很好的解决方案,但在我的情况下,我的 Gemfile 中已经指定了旧版本的 rake (0.8.7)。问题与 spork gem 有关。
    猜你喜欢
    • 2011-08-30
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    相关资源
    最近更新 更多