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?
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.
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:
courir: gem uninstall rake -v 0.9
(ajoutez Sudo
sauf si vous utilisez rvm
)
ajouter à votre Gemfile: gem 'rake', '~> 0.8.7'
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.
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 .
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
J'ai créé un problème pour Rails_admin à propos de cette même erreur.
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.
Cela a été corrigé dans Ruby on Rails 3.0.8.rc1 qui devrait être publié dans quelques jours.
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
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!
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