全局访问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版本问题