不推荐全局访问Rake DSL方法

che*_*ell 86 rake ruby-on-rails-3 railstutorial.org

我正在编写Ruby on Rails 3教程书并在命令行上输入以下内容:

rake db:migrate
Run Code Online (Sandbox Code Playgroud)

产生了以下警告.

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'
Run Code Online (Sandbox Code Playgroud)

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

我该如何解决这个问题?

Pat*_*ify 111

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

所以在上面用户的情况下,DemoApp::Application.load_tasks在Rakefile中.

  • @Marc,目前这是我所知道的唯一一个没有升级到rails 3.0.8或更高版本的修复程序.此版本已解决此问题:https://github.com/rails/rails/commit/83f257fc4862642af29056cb5b7dfef6e1303754.如果您找到更好的解决方案,请告诉我.此外,根据警告,我认为这是正确的解决方案. (2认同)
  • 这对我来说是1.9.2和Rails 3.0.7与Rake 0.9.2 (2认同)

小智 64

我在Stack Overflow问题Ruby on Rails和Rake问题中找到了这个:未初始化的常量Rake :: DSL.它指的是@DHH推文.

将以下内容放在Gemfile中

gem "rake", "0.8.7"
Run Code Online (Sandbox Code Playgroud)

你可能会看到类似的东西

rake aborted!
You have already activated Rake 0.9.1 ...
Run Code Online (Sandbox Code Playgroud)

我的目录中仍然有一份Rake 0.9.1,所以我删除了它.

您可以通过运行以下命令"删除"Rake 0.9.1:

gem uninstall rake -v=0.9.1
Run Code Online (Sandbox Code Playgroud)

如果您安装了多个版本的gem,系统将提示您选择一个版本.

在0.9.1清理完之后,我跑了

bundle update rake
Run Code Online (Sandbox Code Playgroud)

并最终能够创建我的数据库文件.我正在使用rake db:create,但它应该rake db:migrate也适用.

我希望它有所帮助.

  • 我认为故意使用旧图书馆是不错的,当新版图书馆可以投入使用时,请看下面的评论. (12认同)
  • 这对我不起作用.我不得不实际删除rake 0.9.1> gem uninstall rake -v = 0.9.1然后>捆绑更新谢谢安东尼奥 (5认同)
  • 更简单的解决方案是下面的NPatel建议的解决方案.只需在Rakefile中添加一行即可. (2认同)

Lik*_*ell 5

我在使用安装程序的Windows上遇到了同样的问题.Ruby 1.9.2和Rails 3.0.9.这是我做的:

bundle update rake
bundle show rake
Run Code Online (Sandbox Code Playgroud)

在这之后我运行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
Run Code Online (Sandbox Code Playgroud)

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