我正在编写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的任何其他命令。
如何解决此问题?
答案 0 :(得分:111)
在调用应用程序load_tasks之前将include Rake::DSL
添加到Rakefile也对我有用。
所以在Rakefile中DemoApp::Application.load_tasks
之前的上述用户案例中。
答案 1 :(得分:64)
我在Stack Overflow问题 Ruby on Rails and Rake problems: uninitialized constant 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,系统会提示您选择一个版本。
0.9.1清理后,我跑了
bundle update rake
最终能够创建我的数据库文件。我使用的是rake db:create
,但它也适用于rake db:migrate
。
我希望它有所帮助。
答案 2 :(得分:5)
我在使用安装程序的Windows上遇到了同样的问题。 Ruby 1.9.2和Rails 3.0.9。 这是我做的:
bundle update rake
bundle show rake
在这之后我运行了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
如评论中所述,请确保您的应用名称在上面两行中正确无误。
答案 3 :(得分:0)
如果您在Rails的更高版本(例如3. +)上看到这一点,您可能还想通过使用RVM http://beginrescueend.com/并创建特定的ruby&来验证您的环境是否干净。 gemset为您的项目。
在每个项目的基础上使用.rvmrc文件,这将保证您不会将旧的系统宝石带入项目中。以前咬过我的。
这可以防止必须使用生成的Rakefiles&这样
答案 4 :(得分:0)
bundle exec rake db:migrate将解决你的ruby版本问题