不推荐全局访问Rake DSL方法

时间:2011-06-01 09:52:14

标签: ruby-on-rails-3 rake railstutorial.org

我正在编写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的任何其他命令。

如何解决此问题?

5 个答案:

答案 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版本问题