Ruby on Rails和Rake问题:未初始化的常量Rake :: DSL

时间:2011-05-22 02:10:50

标签: ruby-on-rails rake

我有一个非常令人沮丧的问题: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>'

我在互联网上看到类似/相同的错误,人们已经拥有它们。似乎没有人能解决这个问题!

如何解决此问题?

19 个答案:

答案 0 :(得分:193)

早些时候tweet from DHH。 Rake .9.0打破了Rails和其他一些东西,你需要:

gem "rake", "0.8.7"

在您的Gemfile中。

答案 1 :(得分:72)

我在之前的回答之后做了一些研究(对不起,我必须在此之前做)。

所有问题都通过Rake gem 0.9.2解决..我按照以下步骤操作:

  • 我安装了gem install rake -v=0.9.2(我有0.9.1宝石)
  • 使用gem uninstall rake -v=0.9.1
  • 删除了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)

  1. 转到您的项目路径
  2. 输入bundle install --path=vendor/bundle
  3. 输入bundle exec rake db:migrate
  4. 启动服务器类型bundle exec rails s。使用 bundle exec ,您将确保为项目使用正确的gem(必需的版本)。 另外,如果您使用vendor/bundle并为.gitignore设置别名,我建议您将git添加到bundle exec。如果您使用zsh,则可以关注this approach

答案 12 :(得分:3)

与上面的Branstar相同 - 感谢Branstar!

  • 操作系统:Windows Vista
  • 级别:Ruby on Rails的全新内容
  • 我已经安装了Ruby 1.9.2

我按照 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,就像在这个提交中工作的那样:

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

答案 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

它对我有用。