ruby on rails 3 - rails - Método no definido ''tarea'' usando Rake 0.9.0
rails db:migrate (8)
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 #<Anelis::Application:0x9223b6c>
Aquí está el rastro:
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>''
¿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?
Como se explica en la respuesta de Mordaroso , hay un problema en Rake 0.9.0. Necesitarás degradar temporalmente Rake para evitarlo:
ejecutar:
gem uninstall rake -v 0.9
(agregarsudo
menos que uservm
)agregue a su archivo de
gem ''rake'', ''~> 0.8.7''
:gem ''rake'', ''~> 0.8.7''
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 .
Creé un problema para rails_admin sobre este mismo error.
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:
gema ''rastrillo'', ''~> 0.8.7''
Es un problema en Rake (0.9.0), fue http://twitter.com/dhh/status/71966528744071169 por DHH en Twitter.
Rake 0.9, que fue lanzado ayer, rompió Rails (y otros). Mientras esperamos una solución, querrás ''rastrillo'' de gema, ''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
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.
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
gema ''rastrillo'', ''~> 0.8.7''
a su Gemfile y simplemente escriba
paquete ejecutivo rake -T
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