J'ai un problème vraiment frustrant: Rake est bête.
Voici comment le problème se pose:
$ Rails new test_app
$ Rails generate scaffold new_scaffold field1:string field2:text
Les deux fonctionnent très bien, mais quand je le fais,
$ rake db:migrate
Je reçois l'erreur suivante.
(in /home/mikhail/test_app)
rake aborted!
uninitialized constant Rake::DSL
/usr/lib/Ruby/1.9.1/rake.rb:2482:in `const_missing'
/usr/lib/Ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `<class:TaskLib>'
/usr/lib/Ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `<module:Rake>'
/usr/lib/Ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `<top (required)>'
/usr/lib/Ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `require'
/usr/lib/Ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `<top (required)>'
/usr/lib/Ruby/gems/1.9.1/gems/railties-3.0.7/lib/Rails/tasks/documentation.rake:1:in `require'
/usr/lib/Ruby/gems/1.9.1/gems/railties-3.0.7/lib/Rails/tasks/documentation.rake:1:in `<top (required)>'
/usr/lib/Ruby/gems/1.9.1/gems/railties-3.0.7/lib/Rails/tasks.rb:15:in `load'
/usr/lib/Ruby/gems/1.9.1/gems/railties-3.0.7/lib/Rails/tasks.rb:15:in `block in <top (required)>'
/usr/lib/Ruby/gems/1.9.1/gems/railties-3.0.7/lib/Rails/tasks.rb:6:in `each'
/usr/lib/Ruby/gems/1.9.1/gems/railties-3.0.7/lib/Rails/tasks.rb:6:in `<top (required)>'
/usr/lib/Ruby/gems/1.9.1/gems/railties-3.0.7/lib/Rails/application.rb:214:in `require'
/usr/lib/Ruby/gems/1.9.1/gems/railties-3.0.7/lib/Rails/application.rb:214:in `initialize_tasks'
/usr/lib/Ruby/gems/1.9.1/gems/railties-3.0.7/lib/Rails/application.rb:139:in `load_tasks'
/usr/lib/Ruby/gems/1.9.1/gems/railties-3.0.7/lib/Rails/application.rb:77:in `method_missing'
/home/mikhail/test_app/Rakefile:7:in `<top (required)>'
/usr/lib/Ruby/1.9.1/rake.rb:2373:in `load'
/usr/lib/Ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
/usr/lib/Ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
/usr/lib/Ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/lib/Ruby/1.9.1/rake.rb:2006:in `load_rakefile'
/usr/lib/Ruby/1.9.1/rake.rb:1991:in `run'
/usr/bin/rake:31:in `<main>'
J'ai regardé sur Internet à la recherche d'erreurs similaires/identiques, et les gens les ont eues. Personne ne semble jamais résoudre le problème!
Comment puis-je résoudre ce problème?
A Tweet de DHP plus tôt. Rake .9.0 casse Rails et plusieurs autres choses, vous devez:
gem "rake", "0.8.7"
dans votre Gemfile.
J'ai fait des recherches juste après ma réponse précédente (désolé, je dois le faire avant).
Tous les problèmes sont résolus avec Rake gem 0.9.2 .. J'ai suivi ces étapes:
gem install rake -v=0.9.2
(j'avais la gem 0.9.1)gem uninstall rake -v=0.9.1
bundle update
alors le db:migrate
a montré un avertissement, WARNING: Global access to Rake DSL methods is deprecated. Please....
Il a été résolu en ajoutant ce qui suit dans le fichier Rake.
module ::YourApplicationName
class Application
include Rake::DSL
end
end
J'ai omis l'option module ::RakeFileUtils extend Rake::FileUtilsExtend
proposée par @databyte.
Cela signifie que la gemme Rake 0.9.2 fonctionne bien!
En parcourant le chapitre 2 de Railstutorial (demo_app), nous avons rencontré ce problème. J'ai essayé toutes les autres réponses énumérées ici, mais je ne pouvais pas le faire fonctionner avant d'avoir fait ceci:
Mettez ceci dans votre Rakefile ci-dessus nécessite un 'rake':
require 'rake/dsl_definition'
via Comment corriger le problème constant non initialisé Rake :: DSL sur Heroku?
J'ai également réengagé et transmis tous les fichiers à Github et Heroku.
Tout ce que j'avais à faire était d'utiliser:
gem install rake
J'avais déjà la version 0.9.2, j'avais juste besoin d'installer.
Réinstallez le joyau de rake et il devrait fonctionne correctement
gem uninstall rake -v=0.9.2
gem install rake -v=0.9.2
Sinon, spécifiez la version '0.8.7' dans votre Gemfile.
Si vous n'utilisez pas Bundler:
Sudo gem install rake -v 0.8.7
Sudo gem uninstall rake
Ensuite, choisissez de désinstaller 0.9.0.
Si comme moi vous êtes bloqué sur rake 0.8.7 et que vous utilisez Rails 3.2.x, railties ajoute une exigence pour Rake :: DSL
Pour résoudre ce problème, vous devez ajouter:
module Rake
module DSL
end
end
J'ai résolu le même problème en procédant comme suit:
Dans Gemfile:
gem 'rake', '0.9.2'
Puis couru ceci sur la console:
Sudo bundle update rake
Puis ajouté les lignes suivantes à Rakefile:
require 'rake/dsl_definition'
include Rake::DSL
Rails 3.1.rc1 a été mis à jour. Pour vos propres fichiers Rakefile, vous pouvez ajouter ceci avant l'appel de load_tasks.
module ::YourApplicationName
class Application
include Rake::DSL
end
end
module ::RakeFileUtils
extend Rake::FileUtilsExt
end
https://Gist.github.com/4cd2bbe68f98f2f0249f
UPDATE: On a aussi remarqué qu'il avait déjà répondu à cette question: Méthode 'tâche' non définie avec Rake 0.9.0
Je suis un utilisateur Windows XP et j'ai eu le même problème.
Je suis entré gem "rake", "0.8.7" dans le fichier gem, puis j'ai tapé ce qui suit à partir de la fenêtre de commande.
bundle update rake
Cela a résolu mon problème.
J'avais le même problème et je devais utiliser le rake 0.8.7 gem au lieu de 0.9.0.
bundle install --path=vendor/bundle
bundle exec rake db:migrate
Pour démarrer le type de serveur bundle exec Rails s
. Utilisez bundle exec et vous serez sûr d'utiliser les bonnes pierres précieuses (version requise) pour votre projet . Je vous recommanderais également d'ajouter vendor/bundle
à .gitignore
si vous utilisez git
et créez un alias pour bundle exec
. Si vous utilisez zsh
, vous pouvez suivre cette approche
Identique à Branstar ci-dessus - merci Branstar!
J'ai suivi les instructions dans Exécution de Rails 3 sous Windows.
Tout a fonctionné jusqu'à la partie "rake db: migrate" qui m'a donné le même résultat que le message original.
Iran:
gem install rake
J'ai couru encore:
rake db:migrate
Ensuite, j'ai pu démarrer le serveur Ruby on Rails et tout était en place.
Merci encore Branstar :-)
J'ai eu le même problème en utilisant Rake 0.9.2.2. J'ai résolu ce problème en utilisant bundle exec.
Je pense que pour toi (mikhailvs), c'est vraiment frustrant. Je suis devenu fou pendant presque une journée complète. J'ai même désinstallé Ruby et tous ses fichiers dépendants et arrêté mon PC, mais j'ai toujours le même problème.
Ce que j'ai compris du message d'erreur, c'est le problème avec Rake 0.9.2. On dirait qu’il n’a pas été complètement installé. J'ai donc dû réinstaller gem install rake -v=0.9.2
Je n'étais pas sûr d'avoir rake –v0.9.1 installé. Donc, pour être sûr d’être en sécurité, j’ai essayé de supprimer cette ancienne version avec gem uninstall rake -v=0.9.1
. Mais m'a montré le message d'erreur
ERROR: While executing gem ... (Gem::InstallError)
cannot uninstall, check `gem list -d rake`
OK, alors j’ai vérifié tous les répertoires Rake sur mon PC et j’ai trouvé que je n’avais que Rake 0.9.2 . Ensuite, pour vérifier si tout s’est bien passé, j’ai migré avec rake db:migrate
. Et ça a marché :)
Je pense que je n’ai pas eu Rake 0.9.1 car j’ai bien installé Ruby ( rubyinstaller-1.9.2-p180 - sur mon système Windows 7) et tous les gemmes également. Entre temps, Rake 0.9.2 n’était pas complètement installé.
La désinstallation avec "gem uninstall rake" a fonctionné pour moi. J'avais 2 versions installées. Je me suis donc trompée en effectuant une réinstallation propre.
"rake db: create" , pour s’assurer que la base de données existe puis "rake db: migrate" pour sceller le contrat.
Installez rake 0.8.7 et désinstallez 0.9.2.2
$ gem install rake -v 0.8.7
$ gem uninstall rake -v 0.9.2.2
Maintenant utiliser
$ bundle exec rake db:migrate
je crois que ceci vous aidera;)
Courir
bundle exec rake db:migrate
ça marche pour moi.
Pour Rails 2.3, éditer lib/tasks/rspec.rake
comme dans ce commit a fonctionné pour moi: