1

我正在关注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>'

我该如何解决这个问题?

4

3 回答 3

2

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

于 2011-05-23T20:18:30.347 回答
1

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

gem 'rake', '0.8.7'

在终端中你应该运行

bundle exec rake db:migrate

你已经准备好跟随了,我希望这会对你有所帮助。

于 2011-05-26T01:24:17.700 回答
0

我知道你早就解决了这个问题,但以防万一有人需要知道 Rake .9.0 破坏 Rails 和其他一些东西,你需要返回到以前的版本或更新最新版本(11.1.2):

gem "rake", "11.1.2"

在您的 Gemfile 中。

然后只需遵循以下命令:

 $ bundle update rake

然后检查耙子:

$ bundle show rake

它应该显示rake 11.1.2

在此之后您可以成功运行

 $ bundle exec rake db:migrate

(PS:希望这可以帮助某人:))

于 2016-05-13T02:55:15.863 回答