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

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

 rake aborted! uninitialized constant Rake::DSL 

从我收集的内容来看,这似乎是Rake 0.9.2的一个错误。 如果我在本地执行“gem list”,则只安装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,我回到了我开始的地方。

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

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

 bundle exec rake db:migrate 

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

如果你仍然有问题,似乎有其他几个人有同样的问题如何解决Heroku上未初始化的常量Rake :: DSL问题? 他们通过在他们的Rakefile中添加以下内容来解决:

 require 'rake/dsl_definition' require 'rake' 

我在做“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' ,我的gem列表显示rake(0.9.2,0.8.7)。

我有一篇关于此的博文, 你已经激活了Rake 0.9.2 。 有两种方法可以做到这一点:

只使用旧版本的Rake:

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

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

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

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

我用它来解决这个问题,而不删除任何gem。 此方法将强制您的应用使用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 

与富人的答案一样 (解决这个问题而不删除任何gem),但是对步骤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

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