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

7 浏览
0 Comments

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

我遇到了一个非常令人沮丧的问题:Rake变得很愚蠢。\n问题的具体情况如下:\n$ rails new test_app\n$ rails generate scaffold new_scaffold field1:string field2:text\n\n这两个命令都能正常执行,但是当我执行以下命令时,\n

$ rake db:migrate

\n我收到了以下错误信息。\n

(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 `'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `'
/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 `'
/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 `'
/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 '
/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 `'
/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 `'
/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 `
'

\n我在互联网上寻找了类似/相同的错误,其他人也遇到过类似的问题。只是似乎没有人能解决这个问题!\n我该如何解决这个问题?

0
0 Comments

问题原因:在Rails教程的第2章中(demo_app),遇到了这个问题。尝试了这里列出的所有其他答案,但直到我做了以下操作才能解决:

在Rakefile文件中,在require 'rake'之前添加以下代码:

require 'rake/dsl_definition'

来源:如何解决Heroku上的未初始化常量Rake::DSL问题?

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

这似乎是最好的答案,因为从0.9.2降级到0.8.7会破坏某些依赖于gem的情况下,例如我的情况:) 谢谢!

对我来说不管用。执行rake db:create时出现"no such file to load -- rake/dsl_definition"的错误。

0
0 Comments

问题的原因是Rake gem版本为0.9.2时出现了问题。解决方法是按照以下步骤操作:

1. 安装0.9.2版本的Rake gem:gem install rake -v=0.9.2

2. 删除0.9.1版本的Rake gem:gem uninstall rake -v=0.9.1

3. 更新项目依赖:bundle update

4. 在Rake文件中添加以下代码:

module ::YourApplicationName

class Application

include Rake::DSL

end

end

这样就解决了Rake gem 0.9.2版本的问题。

0
0 Comments

问题的原因是Rake版本0.9.0破坏了Rails和其他一些东西的正常运行。解决方法是在Gemfile中添加以下代码:gem "rake", "0.8.7",然后运行bundle update rake命令,确保Rake版本为0.8.7。也可以使用更好的解决方案:gem "rake", "!= 0.9.0",这样可以避免破坏的0.9.0版本,并在发布新的版本后更新(移除该行代码也不会有影响)。此问题在运行heroku rake db:migrate命令时出现,添加以上代码可以解决问题。有些版本可能还需要添加该行代码。如果出现"The bundle currently has rake locked at 0.9.2.2."的提示信息,可以运行"bundle update rake"命令解决。在Ubuntu 11.04上,可以在gemfile的位置找到Gemfile。有些情况下还需要运行sudo gem install rake命令来确保命令行调用的rake版本不是0.8.7。如果无法运行RAKE命令,可能存在更严重的问题。

0