未定义的方法“任务”使用Rake 0.9.0

我刚刚更新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.9.0.beta.4版本时,我有同样的例外。 它看起来像新的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任务。

我知道这不是一个优雅的解决scheme。 但是如果你必须使用Rake的--pre版本,那么可以使用这个快速--pre

正如mordaroso的回答中所解释的 ,Rake 0.9.0中存在一个问题。 您需要暂时降级Rake以避免它:

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

  2. 添加到你的Gemfile:gem'rake gem 'rake', '~> 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的回答中注意到的那样,如果您仍然看到问题,您可能需要执行以下操作来卸载Rake

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

也可以尝试杜克答案中提出的解决scheme。

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

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

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

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

我为这个相同的错误创build了一个rails_admin的问题。

答案是 :

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

应该有一个3.0.8的发布不久,修复它。 同时,您可以将以下行添加到您的Gemfile中:

gem'耙子','〜> 0.8.7'

这是Rake(0.9.0)中的一个问题,它是由DHH在Twitter上发布的。

Rake 0.9是昨天发布的,打破了Rails(和其他)。 当我们等待修复的时候,你需要在你的Gemfile中使用'rake','0.8.7'。

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

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

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

无需卸载Rake 0.9.x,添加

gem'耙子','〜> 0.8.7'

到你的Gemfile然后input

bundle exec rake -T