Método no definido ‘tarea’ usando Rake 0.9.0

Acabo de actualizar Rake a la última versión ( 0.9.0.beta.4 ) y el comando rake termina con el siguiente mensaje de error:

 rake aborted! undefined method `task' for # 

Aquí está el rastro:

 undefined method `task' for # /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 `' /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 `' 

¿Alguien experimentó el mismo problema? Qué podría estar mal? Tenga en cuenta que estoy ejecutando Rails 3.0.3 , también podría estar interesado en el contenido de mi 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" 

¿Como puedo solucionar este problema?

Tuve la misma excepción cuando ejecuté la versión 0.9.0.beta.4 de Rake. Parece que el nuevo Rake::DSL no está cargado correctamente.

Así que agregué el siguiente código a mi 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 

De esa forma pude volver a ejecutar mis tareas de Rake.

Sé que esta no es una solución elegante. Pero si tiene que usar la versión --pre de Rake, podría estar bien utilizar este truco rápido.

Como se explica en la respuesta de Mordaroso , hay un problema en Rake 0.9.0. Necesitarás degradar temporalmente Rake para evitarlo:

  1. ejecutar: gem uninstall rake -v 0.9 (agregar sudo menos que use rvm )

  2. agregue a su archivo de gem 'rake', '~> 0.8.7' : gem 'rake', '~> 0.8.7'

  3. y luego ejecutar: bundle update

Puede omitir el primer paso, pero luego debe ejecutar rake utilizando bundle exec , por ejemplo:

 bundle exec rake db:migrate 

De lo contrario, obtendrá el siguiente error.

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

Actualizar

Como Alex Chaffee notó en un comentario para la respuesta de Pablo Cantero , es posible que deba hacer lo siguiente para desinstalar Rake si aún ve el problema

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

Pruebe también la solución sugerida en la respuesta de Duke .

Nota: Esto se solucionó en Rails 3.0.8

La nueva versión de Rake ya no coloca sus comandos DSL (tarea, archivo, desc, importación, etc.) en la raíz del espacio de nombres del objeto (colocarlos en Object significa que cada objeto tiene un comando de tarea, no muy agradable. los comandos están disponibles mezclando en el Rake::DSL module en cualquier módulo que necesite los comandos.

Hasta que Ruby on Rails se actualice para funcionar con Rake 0.9.x, ponga lo siguiente en su proyecto Rakefile después de “require rake” y antes de llamar a Application.load_tasks :

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

Creé un problema para rails_admin sobre este mismo error.

La respuesta :

Este es un problema general de Rails: http://twitter.com/dhh/status/71966528744071169

Debería haber una versión 3.0.8 pronto que lo arregle. Mientras tanto, puede agregar la siguiente línea a su Gemfile:

gem ‘rastrillo’, ‘~> 0.8.7’

Es un problema en Rake (0.9.0), fue anunciado por DHH en Twitter.

Rake 0.9, que fue lanzado ayer, rompió Rails (y otros). Mientras esperamos una solución, querrás ‘rastrillo’ de gem, ‘0.8.7’ en tu Gemfile.

Esto se ha solucionado en Ruby on Rails 3.0.8.rc1, que debería lanzarse dentro de unos días.

Rake 0.9.1 acaba de ser lanzado, lo que invierte el cambio que causó este error pero agrega una advertencia de desaprobación: https://github.com/jimweirich/rake/commit/44aec3ceac085740bce0c385bccd65fc4d1d911c

Yo uso rvm, pero la desinstalación no me ayuda. ¡Así que .rvm/gems/ruby@global manualmente todos los archivos 0.9 del directorio .rvm/gems/ruby@global y todo se vuelve como antes!

sin la necesidad de desinstalar Rake 0.9.x, agregue

gem ‘rastrillo’, ‘~> 0.8.7’

a su Gemfile y simplemente escriba

paquete ejecutivo rake -T