L'accès global aux méthodes Rake DSL est obsolète

86

Je travaille sur le livre de 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 sais pas quoi faire à ce sujet ni comment travailler avec. Je ne connais aucune autre commande pour Rake.

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

chell
la source

Réponses:

64

J'ai trouvé ceci dans la question de Stack Overflow Ruby on Rails et Rake problèmes: constante non initialisée Rake :: DSL . 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 encore une copie de Rake 0.9.1 dans mon répertoire, je l'ai donc 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 du gem sont installées, vous serez invité à choisir une version.

Après le nettoyage de la 0.9.1, j'ai couru

bundle update rake

et a finalement pu créer mes fichiers de base de données. J'utilisais rake db:create, mais cela devrait également fonctionner rake db:migrate.

J'espère que cela aide.

Brian Bruijn
la source
5
Cela n'a pas fonctionné pour moi. J'ai dû supprimer rake 0.9.1> gem uninstall rake -v = 0.9.1 puis> mise à jour du bundle Merci Antonio
1
Je suis d'accord avec Antonio - quand j'ai dit de supprimer rake 0.9.1, je voulais dire en utilisant gem uninstall rake -v=0.9.1. Mon erreur de ne pas être clair. Merci pour la clarification Antonio! Cheers, Brian
Brian Bruijn
13
Je ne pense pas qu'il soit bon d'utiliser délibérément d'anciennes bibliothèques, alors que les plus récentes peuvent fonctionner, voir le commentaire ci-dessous.
Smar du
2
La solution la plus simple est celle suggérée par NPatel ci-dessous. Ajoutez simplement une ligne à Rakefile.
Slobodan Kovacevic
Je n'ai pas eu de chance avec cette résolution. Il a toujours rencontré la même erreur après la désinstallation de rake 0.9.1 ou 0.9.2 puis l'exécution de la mise à jour du bundle.
Marc
111

L'ajout include Rake::DSLau Rakefile avant que les applications load_tasks ne soient appelées a également fonctionné pour moi.

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

Patélifier
la source
Merci. Correction de mon "AVERTISSEMENT: l'accès global aux méthodes Rake DSL est obsolète." problème.
Slobodan Kovacevic
Est-ce la bonne façon de résoudre ce problème?
Marc
2
@Marc, c'est actuellement le seul correctif que je connaisse sans passer aux rails 3.0.8 ou supérieurs. Ce problème est résolu dans cette version: github.com/rails/rails/commit/… . Si vous trouvez une meilleure solution, veuillez me le faire savoir. De plus, d'après l'avertissement, je pense que c'est la solution appropriée.
Patelify le
1
C'est la solution avec laquelle je suis allé. Je préfère simplement ajouter la ligne plutôt que de jouer à des jeux avec quelle version de Rake fonctionne avec quoi.
jaydel
2
Cela a fonctionné pour moi avec 1.9.2 et Rails 3.0.7 avec Rake 0.9.2
Steven Chanin
5

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 cela, j'utilisais rake 0.9.2.

Ensuite, j'ai mis à jour le 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.

J'aimeMaBell
la source
1
Et pour que la heroku rake db:migratecommande fonctionne, j'ai également dû ajouter require 'rake/dsl_definition'au rakefile (au-dessus de la ligne require 'rake').
LikeMaBell
Faire tout cela fonctionne pour moi, mais ce n'est pas nécessaire. La suggestion de NPatel l'a bien géré.
Scott Swezey
0

Si vous voyez cela sur les versions ultérieures de Rails (comme 3. +), vous pouvez également vérifier que votre environnement est propre en utilisant RVM http://beginrescueend.com/ et en créant un ruby ​​& gemset spécifique pour vos projets.

Utilisez un fichier .rvmrc par projet, cela vous garantira de ne pas intégrer d'anciens joyaux système dans vos projets. Ce qui m'a mordu avant.

Cela évite d'avoir à faire des singes avec les Rakefiles générés et autres.

Jim Munro
la source
0

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

Galuga
la source
Cela ne fonctionne que si vous avez une version fonctionnelle de rake dans votre Gemfile, et en tapant «rake», vous utilisez une version différente installée dans votre PATH
RyanHennig