使用rake db的问题:在railstutorial.org第2章上迁移

时间:2011-05-23 20:04:54

标签: ruby-on-rails railstutorial.org

我正在关注railstutorial.org

的rails教程

我在第2章,并尝试按照说明使用rake迁移数据库:“要继续演示应用程序,我们首先需要使用Rake迁移数据库(方框2.1)”:

$ rake db:migrate

这不起作用,我收到以下错误:

C:\Users\USER1\rails_project\demo_app>rake db:migrate
(in C:/Users/USER1/rails_project/demo_app)
rake aborted!
uninitialized constant Rake::DSL
C:/Ruby192/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `<class:TaskLib>'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `<module:Rake>'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `<top (required)>'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `require'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `<top (required)>'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `require'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `<top (required)>'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `load'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `block in <top (required)>'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `each'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `<top (required)>'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `require'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `initialize_tasks'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:139:in `load_tasks'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:77:in `method_missing'
C:/Users/USER1/rails_project/demo_app/Rakefile:7:in `<top (required)>'
C:/Ruby192/lib/ruby/1.9.1/rake.rb:2373:in `load'
C:/Ruby192/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
C:/Ruby192/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
C:/Ruby192/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
C:/Ruby192/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
C:/Ruby192/lib/ruby/1.9.1/rake.rb:1991:in `run'
C:/Ruby192/bin/rake:31:in `<main>'

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

这是rake的新版本(刚刚发布)的问题。你可以通过将rake降级到0.8.7来解决它。这是一个简单的教程解决方案。请参阅Rake 0.9.0 'undefined method 'task' '并回答该问题。

答案 1 :(得分:1)

您可以在您的Gemfile中添加rake 0.8.7,例如:

gem 'rake', '0.8.7'

在终端中你应该用

运行
bundle exec rake db:migrate

你准备好了,我希望这会对你有帮助。

答案 2 :(得分:0)

我知道你很久以后就会解决这个问题,但万一有人需要知道Rake .9.0打破Rails和其他一些事情,你需要回到以前的版本或更新最新版本(11.1.2) :

gem "rake", "11.1.2"

在您的Gemfile中。

然后按照以下命令执行:

 $ bundle update rake

然后检查rake:

$ bundle show rake

它应该显示 rake 11.1.2

此后您可以成功运行

 $ bundle exec rake db:migrate

(PS:希望这有助于某人:))