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?
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.
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.
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.
bundle exec rake db: migrate résoudra vos problèmes de version Ruby
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.