【问题标题】:Undefined method 'task' using Rake 0.9.0使用 Rake 0.9.0 的未定义方法“任务”
【发布时间】:2011-07-14 07:32:05
【问题描述】:

我刚刚将 Rake 更新到最新版本 (0.9.0.beta.4),rake 命令最终出现以下错误消息:

rake aborted!
undefined method `task' for #<Anelis::Application:0x9223b6c>

这是踪迹:

undefined method `task' for #<Anelis::Application:0x97ef80c>
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:214:in `initialize_tasks'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:139:in `load_tasks'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:77:in `method_missing'
/home/amokrane/Documents/prog/web/learning_rails/anelis/Rakefile:7:in `load_string'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:28:in `eval'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:28:in `load_string'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:16:in `load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:495:in `raw_load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:78:in `block in load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:129:in `standard_exception_handling'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:77:in `load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:61:in `block in run'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:129:in `standard_exception_handling'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:59:in `run'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/bin/rake:31:in `<top (required)>'
/usr/local/rvm/gems/ruby-1.9.2-p136/bin/rake:19:in `load'
/usr/local/rvm/gems/ruby-1.9.2-p136/bin/rake:19:in `<main>'

有人遇到过同样的问题吗?什么可能是错的?注意我运行的是Rails 3.0.3,你可能也对我的Gemfile的内容感兴趣:

source 'http://rubygems.org'
gem 'rails', '3.0.3'
gem 'sqlite3-ruby', :require => 'sqlite3'
gem 'mysql2'
gem 'legacy_data'
gem 'resources_controller', :git => 'git://github.com/ianwhite/resources_controller'
gem 'will_paginate', '3.0.pre' # pagination
gem 'jquery-rails', '>= 0.2.6'
gem "rmagick" # sudo aptitude install libmagick9-dev
gem "paperclip", "~> 2.3"
gem "nested_form", :git => "git://github.com/madebydna/nested_form.git"
gem "meta_search"
gem "hirb"
gem "devise"
gem "rails_admin", :git => "git://github.com/sferik/rails_admin.git"

我该如何解决这个问题?

【问题讨论】:

  • 我认为 rake-0.0.9(已发布)也存在问题。
  • 你的意思是 rake,版本 0.9.0。但是,是的,它坏了。
  • 这是我正在做的事情的问题还是这个特定版本的 rake 的问题?谢谢,N
  • 刚刚也遇到了这个问题,想解决一下

标签: ruby-on-rails-3 rake


【解决方案1】:

我为 rails_admin 创建了一个关于同样错误的问题。

The answer:

这是一个通用的 Rails 问题:http://twitter.com/dhh/status/71966528744071169

应该很快就会有一个 3.0.8 版本来修复它。同时,您可以在 Gemfile 中添加以下行:

gem 'rake', '~> 0.8.7'

这是 Rake (0.9.0) 中的一个问题,它是 DHH 在 Twitter 上的 announced

昨天发布的 Rake 0.9 破坏了 Rails(和其他)。在我们等待修复期间,您需要在 Gemfile 中添加 gem 'rake', '0.8.7'。

【讨论】:

  • 这可能还不够,如果您的 PATH 上仍有 rake 0.9.0 的 /bin 目录。要真正卸载 rake,您必须执行 gem uninstall rake --version 0.9.0 &amp;&amp; gem install rake --version 0.8.7(第二次安装是为了取回可执行文件)。
  • 如果 rake 0.9.0 进入你的 rvm 全局 gemset,你必须这样做rvm use @global &amp;&amp; gem uninstall rake --version 0.9.0 &amp;&amp; rvm use @ &amp;&amp; gem uninstall rake --version 0.9.0 &amp;&amp; gem install rake --version 0.8.7
【解决方案2】:

这已在Ruby on Rails 3.0.8.rc1 中修复,应该会在几天后发布。

【讨论】:

    【解决方案3】:

    注意:这只是在 Rails 3.0.8 中修复

    新版本的 Rake 不再将其 DSL 命令(task、file、desc、import 等)放在 Object 命名空间的根目录下(将它们放在 Object 中意味着每个对象都有一个任务命令,不是很好. DSL 命令可以通过将Rake::DSL module 混合到任何需要命令的模块中来获得。

    在 Ruby on Rails 更新为与 Rake 0.9.x 一起使用之前,请将以下内容放入您的项目 Rakefile 中的“require rake”之后和调用 Application.load_tasks 之前:

    class Rails::Application
      include Rake::DSL if defined?(Rake::DSL)
    end
    

    【讨论】:

    • 我使用的是 Rails 3.0.7,rake 更新为 0.9.0,但在 Gemfile.lock 中默认为 0.8.7,所以如果我们更新为 0.9.0,它会比 Duke 工作得更好
    【解决方案4】:

    正如mordaroso's answer 中所述,Rake 0.9.0 中存在问题。您需要暂时降级 Rake 以避免它:

    1. 运行:gem uninstall rake -v 0.9(添加sudo,除非你使用rvm

    2. 添加到您的 Gemfile:gem 'rake', '~&gt; 0.8.7'

    3. 然后运行:bundle update

    您可以跳过第一步,但您必须使用bundle exec 运行rake,例如:

    bundle exec rake db:migrate
    

    否则会出现以下错误。

    rake aborted!
    You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.
    

    更新

    正如 Alex Chaffee 在 Pablo Cantero's answer 的评论中注意到的那样,如果您仍然看到问题,您可能需要执行以下操作来卸载 Rake

    rvm use @global && gem uninstall rake -v 0.9.0
    rvm use @       && gem uninstall rake -v 0.9.0
    

    还可以尝试Duke's answer 中建议的解决方案。

    【讨论】:

    • 我认为这是最不“hacky”的解决方案。您可能需要以 bundle exec rake 的身份运行 rake 才能使用有效的捆绑版本。
    • @Stuart K, bundle exec rake 仅在未卸载 rake-0.9 时才需要。在这种情况下,会收到错误消息rake aborted! You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.
    • Rails 3.0.7 也存在这个问题,Railties gem 需要 Rake >= 0.8.7,它会拉入 0.9 作为可用...
    • 更不用说 hacky 了:gem 'rake', '~&gt; 0.8.7'
    • 通过“添加到您的 Gemfile”,您到底是什么意思?这个 Gemfile 在哪里?抱歉,n00b 问题
    【解决方案5】:

    在运行 0.9.0.beta.4 版本的 Rake 时,我遇到了同样的异常。 新的Rake::DSL 似乎没有正确加载。

    所以我在我的 Rakefile 中添加了以下代码:

    require 'rake'
    
    # Rake Fix Code start
    # NOTE: change 'Anelis' to your app's module name (see config/application.rb)
    module ::Anelis
      class Application
        include Rake::DSL
      end
    end
    
    module ::RakeFileUtils
      extend Rake::FileUtilsExt
    end
    # Rake Fix Code end
    
    MyApp::Application.load_tasks
    

    这样我就可以再次运行我的 Rake 任务了。

    我知道这不是一个优雅的解决方案。但是,如果您必须使用 Rake 的--pre 版本,那么使用这个快速破解可能没问题。

    【讨论】:

    • 感谢 mordaroso 的提示!
    • 确保将“module ::Anelis”行更改为与您的 Rails 应用程序名称匹配的任何内容。IE“module ::Myapp”我忘了这样做,而这个解决方案没有工作直到我意识到自己的错误。
    • 感谢 mordaroso 的提示。将 Anelis 更改为您的应用名称并在 YourAppName::Application.load_tasks 行之前添加这些魔术代码,否则仍然会发生错误
    • 并确保将其放在 require 'rake'MyApp::Application.load_tasks 之间
    • 看起来这已经持续到 0.9.0 完整版本。我已经在我的 Gemfile.lock 中将 rake 拉回 0.8.7,直到它在 rails 和/或 rake 中修复。 Andrei 下面的答案似乎暗示了这一点。
    【解决方案6】:

    无需卸载Rake 0.9.x,添加

    gem 'rake', '~> 0.8.7'

    到您的 Gemfile 并输入

    bundle exec rake -T

    【讨论】:

    • 请注意,0.9.1 修复了该问题,因此您可以使用该版本而不是降级到 0.8.7。
    【解决方案7】:

    Rake 0.9.1 刚刚发布,它逆转了导致此错误的更改,但添加了弃用警告:https://github.com/jimweirich/rake/commit/44aec3ceac085740bce0c385bccd65fc4d1d911c

    【讨论】:

      【解决方案8】:

      我使用 rvm,但卸载对我没有帮助。所以我手动从.rvm/gems/ruby@global目录中删除了所有0.9文件,一切都变得和以前一样!

      【讨论】:

        猜你喜欢
        • 2011-08-31
        • 1970-01-01
        • 1970-01-01
        • 2011-09-07
        • 1970-01-01
        • 2015-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多