耙子流产! Heroku上未初始化的常量Rake :: DSL

时间:2011-07-18 01:20:00

标签: ruby-on-rails heroku rake

Heroku上尝试rake db:migrate时。我收到以下错误。

rake aborted!
uninitialized constant Rake::DSL

从我收集的内容来看,这似乎是Rake 0.9.2的错误。如果我在本地做“宝石列表”,则只安装Rake(0.8.7)。

我尝试将“gem'rake','0.8.7'”添加到我的gem文件并运行bundle install但是我收到以下错误。

You have requested:
rake = 0.8.7

The bundle currently has rake locked at 0.9.2.
Try running `bundle update rake`

如果我运行bundle update rake,它会恢复到0.9.2,我回到了我开始的地方。

我错过了一些明显的东西吗?

5 个答案:

答案 0 :(得分:10)

您应该使用bundle exec运行命令以确保获得正确的依赖项。所以跑:

bundle exec rake db:migrate

有关更详细的帖子,请参阅Yehuda Katz博客文章http://yehudakatz.com/2011/05/30/gem-versioning-and-bundler-doing-it-right/

如果您仍然遇到问题,似乎有其他几个人遇到同样的问题How to fix the uninitialized constant Rake::DSL problem on Heroku?他们通过在Rakefile中添加以下内容来解决这个问题:

require 'rake/dsl_definition'
require 'rake'

答案 1 :(得分:3)

执行“heroku rake db:migrate”时出现此错误。

/app

rake aborted!
uninitialized constant Rake::DSL
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
....
...
....
..
etc...

我通过添加

修复了它
require 'rake/dsl_definition' 

在RakeFile中,然后输入

bundle update rake
git add .
git commit -m "Change RakeFile"
git push heroku
heroku rake db:migrate

这个解决了我的问题。我没有在我的gem文件中添加gem 'rake', '0.8.7' 我的宝石列表显示rake(0.9.2,0.8.7)。

答案 2 :(得分:1)

我有一篇关于此事的博文, You have already activated Rake 0.9.2 。有两种方法可以做到这一点:

仅使用旧版本的Rake:

使用$ gem list查看您当前的Rake版本。查看您拥有的Rake版本,并将其全部删除,0.8.7除外。您可以使用gem uninstall rake -v=0.9.1或您需要删除的任何版本删除宝石。

或者只是在您的Rake文件中添加一个衬垫:

除非您必须使用旧版本的Rake,否则将此行require 'rake/dsl_definition'添加到Rails的应用程序Rakefile中会更容易。

require File.expand_path('../config/application', __FILE__)
require 'rake/dsl_definition'
require 'rake'

答案 3 :(得分:0)

我用它来解决这个问题而不删除任何宝石。此方法将强制您的应用使用Rake 0.8.7,它比0.9+更稳定。在指定要使用的Rake版本后,您必须运行bundle update rake命令,以便您的gemfile.lock文件与您的gem文件同步(如果您跳过此步骤Heroku将不允许您推送您的代码!)

在您的gem文件中指定要使用的Rake版本:

"rake", "0.8.7"

然后做:

bundle update rake

如果这仍然不适合您,请执行:

sudo gem uninstall rake

答案 4 :(得分:0)

rich's answer一样(解决此问题而不删除任何宝石),但对步骤1进行了更正,还有一些额外的步骤:

  1. 在gem文件中指定:

    gem 'rake', '0.8.7'
    
  2. bundle install(Bundler文档说改变你的gem文件后总是'捆绑安装')

  3. git commit -am "Fixed heroku rake problem by specifying rake 0.8.7 in Gemfile"

  4. git push heroku

  5. heroku rake db:migrate

  6. 没有第3步和第4步,我得到了同样的错误。