86 votes

L'accès global aux méthodes DSL de Rake est déprécié

Je travaille sur le tutoriel Ruby on Rails 3 et j'ai tapé ce qui suit sur la ligne de commande :

rake db:migrate

qui a produit l'avertissement suivant.

WARNING: Global access to Rake DSL methods is deprecated.  Please Include
    ...  Rake::DSL into classes and modules which use the Rake DSL methods.

WARNING: DSL method DemoApp::Application#task called at /Users/imac/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/railties-3.0.7/lib/rails/application.rb:215:in `initialize_tasks'

Je ne suis pas sûr de ce qu'il faut faire à ce sujet ou de la façon de travailler avec lui. Je ne connais pas d'autre commande pour Rake.

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

111voto

NPatel Points 1466

Ajout de include Rake::DSL au Rakefile avant que les applications load_tasks soient appelées a également fonctionné pour moi.

Ainsi, dans le cas de l'utilisateur ci-dessus, avant que la fonction DemoApp::Application.load_tasks dans le Rakefile.

64voto

Brian Bruijn Points 736

J'ai trouvé ceci dans la question Stack Overflow Problèmes avec Ruby on Rails et Rake : constante non initialisée Rake::DSL . Il fait référence à un tweet de @DHH.

Mettez ce qui suit dans votre Gemfile

gem "rake", "0.8.7"

Vous pouvez voir quelque chose comme

rake aborted!
You have already activated Rake 0.9.1 ...

J'avais encore une copie de Rake 0.9.1 dans mon répertoire alors je l'ai supprimée.

Vous pouvez "supprimer" Rake 0.9.1 en exécutant la commande suivante :

gem uninstall rake -v=0.9.1

Si plusieurs versions de la gemme sont installées, il vous sera demandé de choisir une version.

Après que la 0.9.1 ait été nettoyée, j'ai exécuté

bundle update rake

et j'ai enfin pu créer mes fichiers de base de données. J'utilisais rake db:create mais cela devrait fonctionner pour rake db:migrate également.

J'espère que cela vous aidera.

5voto

LikeMaBell Points 372

J'avais le même problème sous Windows avec le programme d'installation. Ruby 1.9.2 et Rails 3.0.9. Voici ce que j'ai fait :

bundle update rake
bundle show rake

Après avoir fait cela, j'exécutais rake 0.9.2.

Puis j'ai mis à jour le Rakefile dans le dossier Root de l'application comme suit :

require File.expand_path('../config/application', __FILE__)
require 'rake'
# If you named your application something other than SampleApp, change that below
module ::SampleApp
    class Application
        include Rake::DSL
    end
end

module ::RakeFileUtils
    extend Rake::FileUtilsExt
end

SampleApp::Application.load_tasks

Comme indiqué dans le commentaire, assurez-vous que le nom de votre application est correct dans les deux lignes appropriées ci-dessus.

0voto

Jim Munro Points 659

Si vous rencontrez ce problème sur des versions ultérieures de Rails (comme 3.+), vous pouvez également vérifier que votre environnement est propre en utilisant RVM http://beginrescueend.com/ et de créer un ruby & gemset spécifique pour vos projets.

Utilisez un fichier .rvmrc pour chaque projet, cela vous garantira de ne pas avoir d'anciennes gemmes système dans vos projets. Ce qui m'a déjà coûté cher.

Cela évite d'avoir à jouer avec les fichiers Rake générés et autres.

0voto

Galuga Points 277

Bundle exec rake db:migrate résoudra vos problèmes de version de ruby

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X