web-dev-qa-db-fra.com

Problèmes Ruby on Rails et Rake: constante non initialisée :: Rake :: DSL

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?

190
HRÓÐÓLFR

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.

193
Caley Woods

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:

  • J'ai installé gem install rake -v=0.9.2 (j'avais la gem 0.9.1)
  • enlevé la 0.9.1 avec gem uninstall rake -v=0.9.1
  • mis à jour avec 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!

72
Arrumaco

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. 

54
djblue2009

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.

25
Branstar

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.

19
hohner

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.

10
Travis Reeder

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
8
Jonathon Horsman

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
7
Gaurav Gupta

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

6
databyte

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.

4
Mr. Beginner

J'avais le même problème et je devais utiliser le rake 0.8.7 gem au lieu de 0.9.0.

4
Paul
  1. Accédez à votre chemin de projet
  2. Tapez bundle install --path=vendor/bundle
  3. Tapez 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

4
ka8725

Identique à Branstar ci-dessus - merci Branstar!

  • OS: Windows Vista
  • Niveau: complètement nouveau chez Ruby on Rails
  • J'ai déjà eu Ruby 1.9.2 installé

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 :-)

3
zimini

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.

2
Sean Kibler

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é.

2
egyamado

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.

2
Christopher

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;)

0
Anuj

Courir 

bundle exec rake db:migrate

ça marche pour moi.

0
user3228456

Pour Rails 2.3, éditer lib/tasks/rspec.rake comme dans ce commit a fonctionné pour moi:

https://github.com/dchelimsky/rspec-Rails/pull/11/files

0
guapolo