全局访问Rake DSL方法已被弃用

我正在通过Ruby on Rails 3教程书,并在命令行上键入以下内容:

rake db:migrate 

其中产生了以下警告。

 WARNING: Global access to Rake DSL methods is deprecated. Please Include ... Rake::DSL into classes and modules which use the Rake DSL methods. WARNING: DSL method DemoApp::Application#task called at /Users/imac/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/railties-3.0.7/lib/rails/application.rb:215:in `initialize_tasks' 

我不知道该怎么做或如何使用它。 我不知道Rake的其他命令。

我该如何解决这个问题?

我发现这堆栈溢出问题的Ruby on Rails和耙问题:未初始化的常量Rake :: DSL 。 它是指@DHH鸣叫。

将以下内容放在您的Gemfile中

 gem "rake", "0.8.7" 

你可能会看到类似的东西

 rake aborted! You have already activated Rake 0.9.1 ... 

我的目录里仍然有一个Rake 0.9.1的副本,所以我把它删除了。

通过运行以下命令可以“删除”Rake 0.9.1:

 gem uninstall rake -v=0.9.1 

如果您安装了多个版本的gem,则会提示您select一个版本。

0.9.1清理完毕后,我跑了

 bundle update rake 

终于能够创build我的数据库文件。 我使用的是rake db:create ,但是它也适用于rake db:migrate

我希望它有帮助。

在调用应用程序load_tasks之前,将include Rake::DSL添加到Rakefile中也适用于我。

所以在上面用户的情况下,在DemoApp::Application.load_tasks之前。

我在安装程序上遇到了与Windows相同的问题。 Ruby 1.9.2和Rails 3.0.9。 这是我做的:

 bundle update rake bundle show rake 

这样做后,我正在运行耙0.9.2。

然后我更新了应用程序根文件夹中的Rakefile,如下所示:

 require File.expand_path('../config/application', __FILE__) require 'rake' # If you named your application something other than SampleApp, change that below module ::SampleApp class Application include Rake::DSL end end module ::RakeFileUtils extend Rake::FileUtilsExt end SampleApp::Application.load_tasks 

正如在评论中指出的那样,请确保您的应用程序的名称在上面两个适当的行中是正确的。

如果您在更高版本的Rails(例如3. +)上看到了这一点,则可能还需要使用RVM http://beginrescueend.com/并为您的项目创build特定的ruby和gemset来validation您的环境是否干净。;

在每个项目的基础上使用一个.rvmrc文件,这将保证你的系统没有变成你的项目。 之前曾经咬过我

这可以防止生成Rakefiles等。

bundle exec rake db:migrate将解决你的ruby版本问题