在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,我回到了我开始的地方。
我错过了一些明显的东西吗?
答案 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进行了更正,还有一些额外的步骤:
在gem文件中指定:
gem 'rake', '0.8.7'
bundle install
(Bundler文档说改变你的gem文件后总是'捆绑安装')
git commit -am "Fixed heroku rake problem by specifying rake 0.8.7 in Gemfile"
git push heroku
heroku rake db:migrate
没有第3步和第4步,我得到了同样的错误。