Método no definido 'tarea' usando Rake 0.9.0

132

Acabo de actualizar Rake a la última versión ( 0.9.0.beta.4) y el rakecomando 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 puede 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?

Amokrane Chentir
fuente
77
Creo que el problema también existe con rake-0.0.9 (lanzado).
Kedar Mhaswade
44
te refieres a rake, versión 0.9.0. Pero sí, está roto.
Rob
Entonces, ¿es esto un problema con algo que estoy haciendo o un problema con esta versión particular de rake? Gracias, N
ifightcrime
también me encontré con este problema, tratando de resolverlo
Muhammad Usman,

Respuestas:

119

Tuve la misma excepción al ejecutar la versión 0.9.0.beta.4 de Rake. Parece que el nuevo Rake::DSLno está cargado correctamente.

Entonces 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 manera pude ejecutar mis tareas de Rake nuevamente.

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

mordaroso
fuente
Gracias mordaroso por la informacion!
Amokrane Chentir
14
Asegúrese de cambiar la línea "module :: Anelis" a la que coincida con el nombre de su aplicación rails. IE "module :: Myapp" Olvidé hacer eso, y esta solución no funcionó hasta que me di cuenta de mi error.
Scott Swezey
1
Gracias mordaroso por los consejos. Cambie Anelis por el nombre de su aplicación y agregue esos códigos mágicos antes de la línea YourAppName :: Application.load_tasks; de lo contrario, el error aún ocurre
Giang Nguyen
10
Y asegúrese de poner esto entre require 'rake'yMyApp::Application.load_tasks
Jits
Parece que esto ha persistido en la versión completa 0.9.0. He devuelto el rastrillo a 0.8.7 en mi Gemfile.lock hasta que esto se arregle en rieles y / o rastrillo. La respuesta a continuación de Andrei parece sugerir esto.
sj26
158

Como se explica en la respuesta de mordaroso , hay un problema en Rake 0.9.0. Necesitas degradar temporalmente Rake para evitarlo:

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

  2. agregar a su Gemfile: gem 'rake', '~> 0.8.7'

  3. y luego ejecuta: bundle update

Puede omitir el primer paso, pero luego debe ejecutar rakeusando 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 .

Andrei
fuente
2
Creo que esta es la solución menos "hacky". Es posible que deba ejecutar rake bundle exec rakepara usar la versión combinada de trabajo.
Stuart K
2
@Stuart K, bundle exec rakesolo es necesario si no se desinstaló rake-0.9. En este caso, uno recibe un mensaje de errorrake aborted! You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.
Andrei
1
Este problema también existe con rieles 3.0.7, con la gema railties requiere Rake> = 0.8.7, que tira de 0,9 como su disposición ...
Mateo salvaje
3
Menos hacky es usar:gem 'rake', '~> 0.8.7'
Fábio Batista
Por "agregar a su Gemfile", ¿qué quiere decir exactamente? ¿Dónde está este Gemfile? Lo sentimos, pregunta n00b
Adnan
40

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 de Objeto (colocarlos en Objeto significa que cada objeto tiene un comando de tarea, no muy agradable. El DSL los comandos están disponibles al mezclarlos en Rake::DSL modulecualquier módulo que los necesite.

Hasta que Ruby on Rails se actualice para que funcione con Rake 0.9.x, coloque lo siguiente en su proyecto Rakefile después de "require rake" y antes de la llamada a Application.load_tasks:

class Rails::Application
  include Rake::DSL if defined?(Rake::DSL)
end
Duque
fuente
Estoy usando Rails 3.0.7, con el rastrillo actualizado a 0.9.0, pero por defecto en Gemfile.lock es 0.8.7, así que si actualizamos a 0.9.0 funciona bien gracias Duke
Jagdish Barabari
16

He creado 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:

gema 'rastrillo', '~> 0.8.7'

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

Rake 0.9, que se lanzó ayer, rompió Rails (y otros). Mientras esperamos una solución, querrás gema 'rastrillo', '0.8.7' en tu Gemfile.

Pablo Cantero
fuente
2
Esto podría no ser suficiente, si su RUTA todavía tiene el directorio rastrillo 0.9.0's / bin en él. Para desinstalar realmente el rastrillo, debe hacerlo gem uninstall rake --version 0.9.0 && gem install rake --version 0.8.7(la segunda instalación es recuperar el ejecutable).
AlexChaffee
1
Y si el rastrillo 0.9.0 entró en su conjunto de gemas global rvm, debe hacerlorvm use @global && gem uninstall rake --version 0.9.0 && rvm use @ && gem uninstall rake --version 0.9.0 && gem install rake --version 0.8.7
AlexChaffee
2

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

MikDiet
fuente
0

sin la necesidad de desinstalar Rake 0.9.x, agregue

gema 'rastrillo', '~> 0.8.7'

a su Gemfile y simplemente escriba

rake ejecutivo exento -T

Helios
fuente
Tenga en cuenta que 0.9.1 solucionó el problema, por lo que puede usar esa versión en lugar de degradar a 0.8.7.
Amokrane Chentir