【问题标题】:Global access to Rake DSL methods is deprecated不推荐对 Rake DSL 方法进行全局访问
【发布时间】:2011-09-06 03:47:23
【问题描述】:

我正在阅读 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-3 rake railstutorial.org


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。修复了我的“警告:不推荐对 Rake DSL 方法进行全局访问”。问题。
    • 这是解决此问题的正确方法吗?
    • @Marc,目前这是我知道的唯一修复方法,无需升级到 rails 3.0.8 或更高版本。该版本已解决此问题:github.com/rails/rails/commit/…。如果您找到更好的解决方法,请告诉我。另外,根据警告,我认为这是正确的解决方法。
    • 这是我采用的解决方案。我宁愿简单地添加这条线,也不愿用哪个版本的 Rake 与什么一起玩游戏。
    • 这对我有用 1.9.2 和 Rails 3.0.7 和 Rake 0.9.2
    【解决方案2】:

    我在 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

    希望对你有帮助。

    【讨论】:

    • 这对我不起作用。我不得不实际删除 rake 0.9.1 > gem uninstall rake -v=0.9.1 然后 > 捆绑更新谢谢安东尼奥
    • 我同意 Antonio 的观点 - 当我说要删除 rake 0.9.1 时,我的意思是通过使用 gem uninstall rake -v=0.9.1。我的错误是没有说清楚。感谢安东尼奥的澄清!干杯,布赖恩
    • 我不认为故意使用旧库是好的,当新库可以工作时,请参阅下面的评论。
    • 更简单的解决方案是下面 NPatel 建议的解决方案。只需在 Rakefile 中添加一行。
    • 我对这个决议没有任何运气。卸载 rake 0.9.1 或 0.9.2 然后运行 ​​bundle update 后仍然出现同样的错误。
    【解决方案3】:

    我在 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
    

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

    【讨论】:

    • 为了让heroku rake db:migrate 命令正常工作,我还必须将require 'rake/dsl_definition' 添加到rakefile(在require 'rake' 行之上)。
    • 为我做所有这些工作,但不是必需的。 NPatel 的建议处理得很好。
    【解决方案4】:

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

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 这只有在你的 Gemfile 中有一个工作版本的 rake 时才有效,并且输入“rake”是使用安装在你的 PATH 中的一些不同的版本
      猜你喜欢
      • 2023-03-31
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多