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

132

Je viens de mettre à jour Rake vers la dernière version ( 0.9.0.beta.4) et la rakecommande 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-t-il rencontré le même problème? Qu'est-ce qui pourrait être faux? Notez que je cours 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?

Amokrane Chentir
la source
7
Je pense que le problème existe également avec rake-0.0.9 (publié).
Kedar Mhaswade
4
vous voulez dire rake, version 0.9.0. mais, oui, il est cassé.
Rob
Est-ce donc un problème avec quelque chose que je fais ou un problème avec cette version particulière de rake? Merci, N
ifightcrime
Je viens de rencontrer ce problème aussi, en essayant de le résoudre
Muhammad Usman

Réponses:

119

J'ai eu la même exception lors de l'exécution de la version 0.9.0.beta.4 de Rake. Il semble que le nouveau Rake::DSLne soit 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 Rake.

Je sais que ce n’est pas une solution élégante. Mais si vous devez utiliser la --preversion de Rake, vous pouvez utiliser ce hack rapide.

mordaroso
la source
Merci mordaroso pour le tuyau!
Amokrane Chentir
14
Assurez-vous de changer la ligne "module :: Anelis" en ce qui correspond au nom de votre application de rails. IE "module :: Myapp" J'ai oublié de faire cela, et cette solution n'a pas fonctionné jusqu'à ce que je réalise mon erreur.
Scott Swezey
1
Merci mordaroso pour les conseils. Remplacez Anelis par le nom de votre application et ajoutez ce code magique avant la ligne YourAppName :: Application.load_tasks sinon l'erreur se produit toujours
Giang Nguyen
10
Et assurez-vous de mettre cela entre require 'rake'etMyApp::Application.load_tasks
Jits
On dirait que cela a persisté dans la version complète 0.9.0. J'ai ramené rake à 0.8.7 dans mon Gemfile.lock jusqu'à ce que cela soit corrigé dans les rails et / ou rake. La réponse ci-dessous par Andrei semble suggérer cela.
sj26
158

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

  1. run: gem uninstall rake -v 0.9(ajoutez sudosauf si vous utilisez rvm)

  2. ajoutez à 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 en rakeutilisant 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.

Mettre à jour

Comme Alex Chaffee l'a remarqué dans un commentaire pour la réponse de Pablo Cantero , vous devrez peut-être 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 la réponse de Duke .

Andrei
la source
2
Je pense que c'est la solution la moins «hacky». Vous devrez peut-être exécuter rake bundle exec rakepour utiliser la version fournie de travail.
Stuart K
2
@Stuart K, bundle exec raken'est nécessaire que si rake-0.9 n'a pas été désinstallé. Dans ce cas, on obtient un message d'erreurrake aborted! You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.
Andrei
1
Ce problème existe également avec Rails 3.0.7, avec la gemme Railties nécessitant Rake> = 0.8.7, qui tire en 0.9 comme disponible ...
Matthew Savage
3
Encore moins hacky est à utiliser:gem 'rake', '~> 0.8.7'
Fábio Batista
Par "ajouter à votre Gemfile", que voulez-vous dire exactement? Où est ce Gemfile? Désolé, question n00b
Adnan
40

Remarque: ce problème 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.) à 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. Le DSL Les commandes sont disponibles en mélangeant Rake::DSL moduledans n'importe quel module nécessitant les commandes.

Jusqu'à ce que Ruby on Rails soit mis à jour pour fonctionner avec Rake 0.9.x, placez 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
Duc
la source
J'utilise Rails 3.0.7, avec rake mis à jour à 0.9.0 mais par défaut dans Gemfile.lock, il est 0.8.7 donc si nous mettons à jour à 0.9.0 cela fonctionne très bien thanx Duke
Jagdish Barabari
16

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 de 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), il a été annoncé par DHH sur Twitter.

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

Pablo Cantero
la source
2
Cela peut ne pas être suffisant, si votre PATH contient toujours le répertoire / bin de rake 0.9.0. Pour vraiment désinstaller rake, vous devez le faire gem uninstall rake --version 0.9.0 && gem install rake --version 0.8.7(la deuxième installation consiste à récupérer l'exécutable).
AlexChaffee
1
Et si rake 0.9.0 est installé dans votre ensemble de gemmes global RVM, vous devez le fairervm 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

J'utilise rvm, mais la désinstallation ne m'aide pas. Je supprime donc manuellement tous les fichiers 0.9 du .rvm/gems/ruby@globalrépertoire et tout redevient comme avant!

MikDiet
la source
0

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

Hélios
la source
Notez que la version 0.9.1 a résolu le problème, vous pouvez donc utiliser cette version au lieu de passer à la version 0.8.7.
Amokrane Chentir