web-dev-qa-db-fra.com

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

Je travaille sur le Ruby on Rails 3 tutoriel book 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?

86
chell

J'ai trouvé cela dans la question Stack Overflow Ruby on Rails and Rake problems: uninitialized constant 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 toujours une copie de Rake 0.9.1 dans mon répertoire, donc je l'ai supprimé.

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, vous serez invité à choisir une version.

Après avoir nettoyé 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 fonctionner pour rake db:migrate ainsi que.

J'espère que ça aide.

64
Brian Bruijn

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

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

111
Patelify

J'avais le même problème sur 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'utilisais le 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.

5
LikeMaBell

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

0
Galuga

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 sur une base par projet, cela garantira que vous n'obtiendrez pas de gemmes système plus anciennes dans vos projets. Ce qui m'a déjà mordu.

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

0
Jim Munro