我有一个非常令人沮丧的问题:Rake愚蠢。
以下是问题的解决方法:
$ rails new test_app
$ rails generate scaffold new_scaffold field1:string field2:text
这两项工作都很好,但是当我这样做时,
$ rake db:migrate
我收到以下错误。
(in /home/mikhail/test_app)
rake aborted!
uninitialized constant Rake::DSL
/usr/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `<class:TaskLib>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `<module:Rake>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `require'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `require'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `load'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `block in <top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `each'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `require'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `initialize_tasks'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:139:in `load_tasks'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:77:in `method_missing'
/home/mikhail/test_app/Rakefile:7:in `<top (required)>'
/usr/lib/ruby/1.9.1/rake.rb:2373:in `load'
/usr/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:1991:in `run'
/usr/bin/rake:31:in `<main>'
我在互联网上看到类似/相同的错误,人们已经拥有它们。似乎没有人能解决这个问题!
如何解决此问题?
答案 0 :(得分:193)
答案 1 :(得分:72)
我在之前的回答之后做了一些研究(对不起,我必须在此之前做)。
所有问题都通过Rake gem 0.9.2解决..我按照以下步骤操作:
gem install rake -v=0.9.2
(我有0.9.1宝石)gem uninstall rake -v=0.9.1
bundle update
然后db:migrate
显示警告WARNING: Global access to Rake DSL methods is deprecated. Please....
通过在Rake文件中添加以下内容解决了这个问题。
module ::YourApplicationName
class Application
include Rake::DSL
end
end
我省略了@databyte提取的module ::RakeFileUtils extend Rake::FileUtilsExtend
选项。
这意味着Rake gem 0.9.2工作正常!
答案 2 :(得分:54)
通过Railstutorial(demo_app)的第2章并遇到了这个问题。我尝试了这里列出的所有其他答案,但在我这样做之前无法让它工作:
将它放在你的Rakefile上面,需要'rake':
require 'rake/dsl_definition'
通过How to fix the uninitialized constant Rake::DSL problem on Heroku?
我还重新发送并将所有文件推送到Github和Heroku。
答案 3 :(得分:25)
我需要做的就是使用:
gem install rake
我已经有0.9.2版,只需要安装。
答案 4 :(得分:19)
重新安装rake gem,应该正常工作:
gem uninstall rake -v=0.9.2
gem install rake -v=0.9.2
如果没有,请在Gemfile中指定版本“0.8.7”。
答案 5 :(得分:10)
如果不使用Bundler:
sudo gem install rake -v 0.8.7
sudo gem uninstall rake
然后选择卸载0.9.0。
答案 6 :(得分:8)
如果像我一样,你仍然坚持使用rake 0.8.7,并且你正在使用Rails 3.2.x,那么railties会增加对Rake :: DSL的要求
要解决此问题,请在Rakefile的顶部添加:
module Rake
module DSL
end
end
答案 7 :(得分:7)
我通过以下步骤解决了同样的问题:
在Gemfile中:
gem 'rake', '0.9.2'
然后在控制台上运行:
sudo bundle update rake
然后将以下行添加到Rakefile:
require 'rake/dsl_definition'
include Rake::DSL
答案 8 :(得分:6)
Rails 3.1.rc1已更新。对于您自己的Rakefiles,您可以在调用load_tasks之前添加它。
module ::YourApplicationName
class Application
include Rake::DSL
end
end
module ::RakeFileUtils
extend Rake::FileUtilsExt
end
https://gist.github.com/4cd2bbe68f98f2f0249f
更新:还注意到它已在这里得到解答:Undefined method 'task' using Rake 0.9.0
答案 9 :(得分:4)
我是Windows XP用户,我遇到了同样的问题。
我在gem文件中输入了gem“rake”,“0.8.7”,然后从命令窗口输入以下内容。
bundle update rake
这解决了我的问题。
答案 10 :(得分:4)
我有同样的问题,不得不使用rake 0.8.7 gem而不是0.9.0。
答案 11 :(得分:4)
bundle install --path=vendor/bundle
bundle exec rake db:migrate
启动服务器类型bundle exec rails s
。使用 bundle exec ,您将确保为项目使用正确的gem(必需的版本)。
另外,如果您使用vendor/bundle
并为.gitignore
设置别名,我建议您将git
添加到bundle exec
。如果您使用zsh
,则可以关注this approach
答案 12 :(得分:3)
与上面的Branstar相同 - 感谢Branstar!
我按照 Running Rails 3 on Windows 中的说明进行操作。
所有工作都进行到“rake db:migrate”部分,它给了我与原始帖子相同的输出。
我跑了:
gem install rake
我又跑了一次:
rake db:migrate
然后我就可以启动Ruby on Rails服务器并将所有内容都安装到位。
再次感谢Branstar: - )
答案 13 :(得分:2)
我觉得你(mikhailvs),这真的令人沮丧。我差不多整整一天都疯了。我甚至卸载了Ruby及其所有相关文件并关闭了我的电脑,但我仍然遇到了同样的问题。
我从错误消息中得到的是Rake 0.9.2的问题。好像它没有完全安装。所以我不得不重新安装gem install rake -v=0.9.2
我不确定我是否安装了rake -v0.9.1。因此,为了确保我的安全,我尝试使用gem uninstall rake -v=0.9.1
删除旧版本。但是向我显示了错误消息
ERROR: While executing gem ... (Gem::InstallError)
cannot uninstall, check `gem list -d rake`
好的,所以我检查了我电脑上的所有Rake目录,发现我只有Rake 0.9.2。
然后检查一切是否正常,我使用rake db:migrate
迁移。它起作用了:))
我认为我没有Rake 0.9.1,因为我在我的Windows 7系统上清理安装了Ruby(rubyinstaller-1.9.2-p180)以及所有宝石。与此同时,Rake 0.9.2尚未完全安装。
答案 14 :(得分:2)
我使用Rake 0.9.2.2时遇到了同样的问题。我通过使用bundle exec解决了这个问题。
答案 15 :(得分:2)
使用“gem uninstall rake”卸载为我工作,我安装了2个版本,所以我开玩笑做了一个干净的重新安装。
“rake db:create”,以确保数据库存在 然后“rake db:migrate”来达成协议。
答案 16 :(得分:0)
对于Rails 2.3编辑lib/tasks/rspec.rake
,就像在这个提交中工作的那样:
答案 17 :(得分:0)
安装rake 0.8.7并卸载0.9.2.2
$ gem install rake -v 0.8.7
$ gem uninstall rake -v 0.9.2.2
现在使用
$ bundle exec rake db:migrate
我认为这会对你有所帮助 ;)
答案 18 :(得分:0)
运行
bundle exec rake db:migrate
它对我有用。