86

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

我该如何解决这个问题?

4

5 回答 5

111

在调用应用程序 load_tasks 之前添加include Rake::DSL到 Rakefile 也对我有用。

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

于 2011-06-11T00:05:01.773 回答
64

我在 Stack Overflow 问题Ruby on Rails 和 Rake 问题中发现了这一点:未初始化的常量 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

我希望它有所帮助。

于 2011-06-01T10:45:41.453 回答
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

如评论中所述,请确保您的应用程序名称在上面两行相应的行中是正确的。

于 2011-06-30T15:29:05.703 回答
0

如果您在更高版本的 Rails(如 3.+)上看到这一点,您可能还想通过使用 RVM http://beginrescueend.com/并为您的项目创建特定的 ruby​​ 和 gemset 来验证您的环境是否干净。

在每个项目的基础上使用 .rvmrc 文件,这将保证您不会将较旧的系统 gem 放入您的项目中。以前曾咬过我。

这样可以避免不得不使用生成的 Rakefile 等。

于 2011-09-17T12:10:18.917 回答
0

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

于 2011-12-16T05:46:35.557 回答