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>'

我在互联网上寻找过类似的错误,人们也有过类似的错误。只是似乎从来没有人解决这个问题!

我该如何解决这个问题?

93897 次浏览

我也有同样的问题,不得不使用 rake 0.8.7 gem 而不是0.9。

Rake.9.0破坏了 Rails 和其他一些东西,您需要:

gem "rake", "0.8.7"

在你的双子档案里。

Rails 3.1. rc1已经更新。对于您自己的 Rakefile,您可以在调用 load _ asks 之前添加这个。

module ::YourApplicationName
class Application
include Rake::DSL
end
end


module ::RakeFileUtils
extend Rake::FileUtilsExt
end

Https://gist.github.com/4cd2bbe68f98f2f0249f

更新: 也注意到它已经在这里回答: 使用 Rake 0.9.0的未定义方法

如果不使用 Bundler:

sudo gem install rake -v 0.8.7
sudo gem uninstall rake

然后选择卸载0.9.0。

我是一个 Windows XP 用户,我有同样的问题。

我在 gemfile 中输入 gem“ rake”,“0.8.7”,然后在命令窗口中键入以下内容。

bundle update rake

这解决了我的问题。

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

使用 Rake gem 0.9.2可以解决所有问题,我遵循以下步骤:

  • 我安装了 gem install rake -v=0.9.2(我有0.9.1 gem)
  • 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
    
  • I ommited the module ::RakeFileUtils extend Rake::FileUtilsExtend option sugested by @databyte.

It means that the Rake gem 0.9.2 works fine!

我只需要用:

gem install rake

我已经有0.9.2版本了,只是需要安装。

和上面的布兰斯塔一样-谢谢布兰斯塔!

  • 操作系统: Windows Vista
  • 级别: 对 RubyonRails 来说是全新的
  • 我已经安装了 Ruby1.9.2

我按照 在 Windows 上运行 Rails 3的说明做的。

所有工作,直到“ rake 数据库: 迁移”的一部分,给我相同的输出作为原来的职位。

我跑过去:

gem install rake

我又跑了:

rake db:migrate

然后我就可以启动 RubyonRails 服务器,一切就绪。

再次感谢布兰斯塔: -)

浏览 Railstutatory (demo _ app)的第2章时,遇到了这个问题。我尝试了这里列出的所有其他答案,但是直到我这样做之前都无法工作:

把这个放在你的 Rakefile 上面需要“ rake”:

require 'rake/dsl_definition'

通过 如何修复 Heroku 上未初始化的常量 Rake: : DSL 问题?

我还将所有文件重新提交并推送到 Github 和 Heroku。

我很同情你(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。 然后为了检查一切是否正常,我使用 rake db:migrate迁移

我想我没有 Rake 0.9.1,因为我干净地安装了 Ruby (Rubyinstaller-1.9.2-p180-在我的 Windows 7系统上)和所有 gems。与此同时,Rake 0.9.2还没有完全安装。

我用以下步骤解决了同样的问题:

在 Gemfile:

gem 'rake', '0.9.2'

然后在控制台上运行:

sudo bundle update rake

然后在 Rakefile 中添加以下代码行:

require 'rake/dsl_definition'
include Rake::DSL

重新安装耙宝石和它的 应该工作良好:

gem uninstall rake -v=0.9.2
gem install rake -v=0.9.2

如果没有,请在 Gemfile 中指定版本“0.8.7”。

卸载与 “ gem 卸载耙”为我工作,我有2个版本安装,所以我只是做了一个干净的重新安装。

“ rake db: create” ,以确保数据库存在 然后 “ rake db: 洄游”完成交易。

  1. 回到你的项目路径
  2. 类型 bundle install --path=vendor/bundle
  3. 类型 bundle exec rake db:migrate

启动服务器类型 bundle exec rails s。使用 捆绑执行器捆绑执行器,您将确保为您的项目使用正确的 gems (必需的版本)。 另外,如果您使用 git并为 bundle exec创建别名,我建议您将 vendor/bundle添加到 .gitignore。如果你使用 zsh,你可以遵循这种方法

如果你像我一样被 Rake 0.8.7困住了,并且你正在使用 Rails 3.2. x,那么 Railties 增加了对 Rake: : DSL 的需求

为了解决这个问题,您应该在 Rakefile 的顶部添加:

module Rake
module DSL
end
end

我在使用 Rake 0.9.2.2时遇到了同样的问题,我通过使用 bundle exec 解决了这个问题。

对于 Rails 2.3来说,像这样编辑 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

对我有用。