Ruby on Rails和Rake问题:未初始化的常量Rake :: DSL
我有一个非常令人沮丧的问题: 耙是愚蠢的。
下面是问题的出现:
$ 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>'
我曾经在互联网上看过类似的/同样的错误,而且人们已经拥有了它们。 似乎没有人能解决这个问题!
我该如何解决这个问题?
DHH之前的推特 。 Rake .9.0打破了Rails和其他一些东西,你需要:
gem "rake", "0.8.7"
在你的Gemfile中。
我刚才回答之前做了一些研究(对不起,我必须先做)。
所有的问题都解决了耙gem0.9.2 ..我遵循这些步骤:
- 我安装了
gem install rake -v=0.9.2
(我有0.9.1的gem) - 用
gem uninstall rake -v=0.9.1
删除了gem uninstall rake -v=0.9.1
- 更新
bundle update
-
那么
db:migrate
显示警告,WARNING: Global access to Rake DSL methods is deprecated. Please....
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
FileUtilsExtend选项。
这意味着耙gem0.9.2工作正常!
阅读Railstutorial(demo_app)的第2章,并遇到这个问题。 我尝试了这里列出的所有其他答案,但是在我这样做之前无法使用它:
把这个放在你的Rakefile上面需要'rake':
require 'rake/dsl_definition'
通过如何解决Heroku上未初始化的常量Rake :: DSL问题?
我也重新推送了所有的文件到Github和Heroku。
我所需要做的就是使用:
gem install rake
我已经有0.9.2版本,只需要安装。
重新安装耙gem,它应该工作正常:
gem uninstall rake -v=0.9.2 gem install rake -v=0.9.2
如果没有,请在您的Gemfile中指定版本“0.8.7”。
如果不使用Bundler:
sudo gem install rake -v 0.8.7 sudo gem uninstall rake
然后select卸载0.9.0。
如果像我一样,你被困在Rake 0.8.7上,而你正在使用Rails 3.2.x,那么railties就会为Rake :: DSL
为了解决这个问题,你应该添加Rakefile的顶部:
module Rake module DSL end end
我通过以下步骤解决了同样的问题:
在Gemfile中:
gem 'rake', '0.9.2'
然后在控制台上运行这个:
sudo bundle update rake
然后将下面几行添加到Rakefile中:
require 'rake/dsl_definition' include Rake::DSL
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
更新:也注意到它已经在这里回答: 使用Rake 0.9.0未定义的方法“任务”
我有同样的问题,不得不使用耙0.8.7gem,而不是0.9.0。
我是一个Windows XP用户,我有同样的问题。
我在gemfile中input了gem“rake”,“0.8.7”,然后从命令窗口input以下内容。
bundle update rake
这解决了我的问题。
- 转到您的项目path
- 键入
bundle install --path=vendor/bundle
- 键入
bundle exec rake db:migrate
启动服务器types的bundle exec rails s
。 使用bundle exec ,你可以确定你的项目使用了正确的gem(必需的版本)。 另外,我会build议你添加vendor/bundle
.gitignore
如果你使用git
和别名为bundle exec
。 如果你使用zsh
你可以按照这个方法
和Branstar一样 – 感谢Branstar!
- 操作系统:Windows Vista
- 级别:Ruby on Rails全新
- 我已经安装了Ruby 1.9.2
我按照Windows上的Running Rails 3的说明进行操作。
所有的工作,直到“耙db:迁移”部分给了我原来的职位相同的输出。
我跑了:
gem install rake
我又跑了:
rake db:migrate
然后我就可以启动Ruby on Rails服务器,并且安装了一切。
再次感谢Branstar 🙂
我觉得你(mikhailvs),这真是令人沮丧。 我已经疯了近一整天。 我甚至卸载了Ruby和所有依赖文件并closures了我的电脑,但是我仍然遇到了同样的问题。
我从错误信息中得到的是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,因为我清理安装了Ruby( rubyinstaller-1.9.2-p180 – 在我的Windows 7系统上)以及所有的gem。 与此同时Rake 0.9.2没有完全安装。
卸载“gem uninstall rake”为我工作,我有2个版本安装,所以我做了一个干净的重新安装。
“耙db:创build” ,以确保数据库存在,然后“耙db:迁移”密封交易。
我有使用Rake 0.9.2.2相同的问题。 我使用bundle exec来解决这个问题。
对于Rails 2.3编辑lib/tasks/rspec.rake
就像这个提交对我lib/tasks/rspec.rake
:
安装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
我认为这会帮助你;)
跑
bundle exec rake db:migrate
它适用于我。