web-dev-qa-db-fra.com

Méthode non définie 'tâche' utilisant Rake 0.9.0

Je viens de mettre à jour Rake vers la dernière version (0.9.0.beta.4) et la commande rake se termine par le message d'erreur suivant:

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

Voici la trace:

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>'

Quelqu'un a rencontré le même problème? Qu'est-ce qui pourrait être faux? Notez que je lance Rails 3.0.3, vous pouvez également être intéressé par le contenu de mon 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"

Comment puis-je résoudre ce problème?

132
Amokrane Chentir

J'ai eu la même exception lors de l'exécution de la version 0.9.0.beta.4 de Rake. Il ressemble au nouveau Rake::DSL n'est pas chargé correctement.

J'ai donc ajouté le code suivant à mon 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 cette façon, j'ai pu exécuter à nouveau mes tâches de râteau.

Je sais que ce n'est pas une solution élégante. Mais si vous devez utiliser le --pre version de Rake, il serait peut-être bon d'utiliser ce hack rapide.

119
mordaroso

Comme expliqué dans réponse de mordaroso , il y a un problème dans Rake 0.9.0. Vous devez temporairement rétrograder Rake afin de l'éviter:

  1. courir: gem uninstall rake -v 0.9 (ajoutez Sudo sauf si vous utilisez rvm)

  2. ajouter à votre Gemfile: gem 'rake', '~> 0.8.7'

  3. puis exécutez: bundle update

Vous pouvez ignorer la première étape, mais vous devez ensuite exécuter rake en utilisant bundle exec, par exemple:

bundle exec rake db:migrate

Sinon, vous obtenez l'erreur suivante.

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

Mise à jour

Comme Alex Chaffee l'a remarqué dans un commentaire pour réponse de Pablo Cantero , que vous pourriez avoir besoin de faire ce qui suit pour désinstaller Rake si vous voyez toujours le problème

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

Essayez également la solution suggérée dans réponse de Duke .

158
Andrei

Remarque: cela vient d'être corrigé dans Rails 3.0.8

La nouvelle version de Rake ne place plus ses commandes DSL (tâche, fichier, desc, import, etc.) dans la racine de l'espace de noms Object (les placer dans Object signifiait que chaque objet avait une commande de tâche, pas très agréable. La DSL Les commandes sont disponibles en mélangeant dans le Rake::DSL module dans n'importe quel module nécessitant les commandes.

Jusqu'à Ruby on Rails est mis à jour pour fonctionner avec Rake 0.9.x, mettez ce qui suit dans votre projet Rakefile après "require rake" et avant l'appel à Application.load_tasks:

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

J'ai créé un problème pour Rails_admin à propos de cette même erreur.

La réponse :

Il s'agit d'un problème général Rails: http://Twitter.com/dhh/status/71966528744071169

Il devrait bientôt y avoir une version 3.0.8 qui le corrige. En attendant, vous pouvez ajouter la ligne suivante à votre Gemfile:

gemme 'râteau', '~> 0.8.7'

C'est un problème dans Rake (0.9.0), c'était annoncé par DHH sur Twitter.

Rake 0.9, qui a été publié hier, a cassé Rails (et autres). Pendant que nous attendons un correctif, vous aurez besoin de gem "rake", "0.8.7" dans votre Gemfile.

16
Pablo Cantero

Cela a été corrigé dans Ruby on Rails 3.0.8.rc1 qui devrait être publié dans quelques jours.

7
Andrew Nesbitt

Rake 0.9.1 vient d'être publié, ce qui annule la modification qui a provoqué cette erreur mais ajoute un avertissement de dépréciation: https://github.com/jimweirich/rake/commit/44aec3ceac085740bce0c385bccd65fc4d1d911c

3
Andrew Nesbitt

J'utilise rvm, mais la désinstallation ne m'aide pas. J'ai donc supprimé manuellement tous les fichiers 0.9 de .rvm/gems/Ruby@global répertoire et tout redevient comme avant!

2
MikDiet

sans avoir besoin de désinstaller Rake 0.9.x, ajoutez

gemme 'râteau', '~> 0.8.7'

à votre Gemfile et tapez simplement

bundle exec rake -T

0
Helios