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 

这解决了我的问题。

  1. 转到您的项目path
  2. 键入bundle install --path=vendor/bundle
  3. 键入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

https://github.com/dchelimsky/rspec-rails/pull/11/files

安装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 

它适用于我。