L’access global aux méthodes Rake DSL est obsolète

Je travaille sur le manuel du didacticiel Ruby on Rails 3 et je saisis 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 sais pas trop quoi faire ou comment travailler avec. Je ne connais aucune autre commande pour Rake.

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

J’ai trouvé cela dans Stack Overflow question Problèmes Ruby on Rails et Rake: Rake constant :: DSL non initialisé . Il fait référence à un tweet @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 toujours une copie de Rake 0.9.1 dans mon répertoire, donc je l’ai supprimée.

Vous pouvez “supprimer” Rake 0.9.1 en lançant la commande suivante:

 gem uninstall rake -v=0.9.1 

Si plusieurs versions de la gem sont installées, vous serez invité à choisir une version.

Après 0.9.1 a été nettoyé, j’ai couru

 bundle update rake 

et a finalement pu créer mes fichiers de firebase database. J’utilisais rake db:create , mais cela devrait fonctionner pour rake db:migrate aussi.

J’espère que ça aide.

L’ajout de include Rake::DSL au fichier Rakefile avant que les applications load_tasks aient été appelées a également fonctionné pour moi.

Donc, dans le cas de l’utilisateur ci-dessus avant DemoApp::Application.load_tasks dans le fichier Rakefile.

J’avais le même problème sous Windows avec l’installateur. 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, je courais rake 0.9.2.

Ensuite, j’ai mis à jour le fichier Rakefile dans le dossier racine 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.

Si vous voyez ceci sur des versions ultérieures de Rails (comme 3. +), vous pouvez également vérifier que votre environnement est propre en utilisant RVB http://beginrescueend.com/ et en créant un Ruby & Gemset spécifique pour vos projets.

Utilisez un fichier .rvmrc pour chaque projet, cela vous garantira de ne pas intégrer d’anciens gems dans vos projets. Ce qui m’a mordu avant.

Cela évite d’avoir à jouer avec les fichiers Rakefile générés, etc.

bundle exec rake db: migrate va résoudre vos problèmes de version ruby