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


189

J'ai un problème vraiment frustrant: Rake est stupide.

Voici comment le problème survient:

$ rails new test_app
$ rails generate scaffold new_scaffold field1:string field2:text

Les deux fonctionnent très bien, mais quand je fais cela,

$ rake db:migrate

J'obtiens 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 cherché sur Internet des erreurs similaires / identiques, et les gens les ont eues. Personne ne semble jamais résoudre le problème!

Comment résoudre ce problème?

Réponses:


193

Un tweet de DHH plus tôt. Rake .9.0 casse les rails et plusieurs autres choses, vous devez:

gem "rake", "0.8.7"

dans votre Gemfile.


17
Cela a fonctionné pour moi. J'avais besoin de faire en bundle update rakepremier. Puis j'ai vérifié avec bundle show rake. Il devrait dire 0.8.7. Alors rake db:migrate.
B Seven

26
Ou mieux encore: gem "rake", "!= 0.9.0". Cela évite la version 0.9.0 cassée, mais sera mise à jour vers une version plus récente une fois qu'une version plus récente sera publiée (la supprimer ultérieurement ne fera pas de mal, mais la conserver ne devrait pas non plus faire de mal).
Spiralis

6
@Spiralis J'ai également rencontré le problème avec la version 0.9.2. Vous devrez donc peut-être ajouter cette ligne pour quelques versions.
dharmatech

3
cette solution a fonctionné pour moi. Comme @dharmatech, j'ai ce problème heroku rake db:migrateet cela a semblé le résoudre. n'oubliez pas d'ajouter et de valider ces modifications dans git avant de continuer;)
pruett

1
Cela peut fonctionner pour Rails, mais je devais aussi sudo gem install rakem'assurer que la rakeversion que j'appelais depuis la ligne de commande n'était pas la 0.8.7.
Autumnsault

72

J'ai fait quelques 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 gemme 0.9.1)
  • supprimé le 0.9.1 avec gem uninstall rake -v=0.9.1
  • mis à jour avec bundle update
  • puis le db:migratemontra un avertissement,WARNING: Global access to Rake DSL methods is deprecated. Please....

    Il a été résolu en ajoutant ce qui suit au fichier Rake.

    module ::YourApplicationName  
      class Application
        include Rake::DSL
      end
    end
  • J'ai omis l' module ::RakeFileUtils extend Rake::FileUtilsExtendoption suggérée par @databyte.

Cela signifie que la gemme Rake 0.9.2 fonctionne bien!


J'ai suivi les trois premières étapes et je n'ai reçu aucun avertissement, donc je ne me suis pas soucié du reste, merci pour la suggestion!
Abe Petrillo

1
Cela m'incite à demander ... Pourquoi devrais-je pirater Rake pour conserver cette fonctionnalité? Qu'est-ce que Rake essaie de faire et que dois-je utiliser maintenant?
Ryanmt

@Arrumaco, quel est le répertoire du fichier Rake?
Ctak

Il est intéressant de noter que l'ajout à la RakeFiledevrait être avant require 'rake'- m'a attrapé :)
Ciaran Archer

12
même problème, mais j'avais déjà rake (0.9.2, 0.8.7). La réinstallation de 0.9.2 semble cependant résoudre le problème: 1) gem uninstall rake -v=0.9.22)gem install rake -v=0.9.2
DK.

54

En parcourant le chapitre 2 de Railstutorial (demo_app) et en rencontrant ce problème. J'ai essayé toutes les autres réponses énumérées ici, mais je n'ai pas pu le faire fonctionner avant de faire ceci:

Mettez ceci dans votre Rakefile ci-dessus, nécessite 'rake':

require 'rake/dsl_definition'

via Comment résoudre le problème constant non initialisé de Rake :: DSL sur Heroku?

J'ai également réengagé et poussé tous les fichiers vers Github et Heroku.


Cela semble être la meilleure réponse car la rétrogradation de 0.9.2 à 0.8.7 briserait certaines dépendances de gemmes en fonction de chaque cas, comme le mien :) Merci!
DiegoSalazar

Ça ne marche pas pour moi. Je reçois "aucun fichier de ce type à charger - rake / dsl_definition" en faisant rake db: create
KMC

25

Tout ce que j'avais à faire était d'utiliser:

gem install rake

J'avais déjà la version 0.9.2, juste besoin d'installer.


wow cela a fonctionné pour moi. Mais pourriez-vous expliquer pourquoi je dois installer rake alors que je rake devrait déjà être là?
KMC

Je ne suis pas encore vraiment un expert, mais je crois comprendre qu'il y a une différence entre `` installer '' des gemmes sur votre PC et les `` installer '' dans un registre de gemmes - je suppose que c'est parce que l'installation de Ruby a besoin de savoir quelles gemmes sont où sur votre PC. C'est peut-être quelque chose qui pourrait être automatisé à l'avenir, ou est déjà automatisé dans certaines distributions Ruby ...
Branstar

19

Réinstallez la gemme de râteau et cela devrait fonctionner 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.


cette approche a fonctionné pour moi et j'ai préféré ne pas avoir à rétrograder la version ..
Tarnschaf

A travaillé pour moi aussi, uniquement pour rake -v 0.9.2.2
Haspemulator

10

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.


cela l'a corrigé pour moi sans bundler (rails 2.3.8). J'avais essayé d'installer rake 0.9.2 mais cela ne l'a pas résolu. L'installation de 0.8.7 et la désinstallation de 0.9.2 ont finalement fonctionné pour moi.
Michael Durrant

8

Si comme moi vous êtes coincé sur rake 0.8.7 et que vous utilisez Rails 3.2.x, alors railties ajoute une exigence pour Rake :: DSL

Pour résoudre ce problème, vous devez ajouter en haut de votre fichier Rake:

module Rake
  module DSL
  end
end

7

J'ai résolu le même problème avec les étapes suivantes:

Dans Gemfile:

gem 'rake', '0.9.2'

Ensuite, exécutez ceci sur la console:

sudo bundle update rake

Puis ajouté les lignes suivantes à Rakefile:

require 'rake/dsl_definition'
include Rake::DSL


4

J'ai eu le même problème et j'ai dû utiliser la gemme rake 0.8.7 au lieu de 0.9.0.


4

Je suis un utilisateur de Windows XP et j'ai eu le même problème.

J'ai entré gem "rake", "0.8.7" dans le gemfile, puis j'ai tapé ce qui suit dans la fenêtre de commande.

bundle update rake

Cela a résolu mon problème.


a fonctionné pour moi aussi, à partir d'aujourd'hui. essayant juste de coder des rails sur Win7.
arscariosus

4
  1. Accédez au chemin de votre projet
  2. Type bundle install --path=vendor/bundle
  3. Type 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 bons gemmes (version requise) pour votre projet. Aussi je vous recommande d'ajouter vendor/bundleà .gitignoresi vous utilisez gitet faites alias bundle exec. Si vous utilisez, zshvous pouvez suivre cette approche


3

Identique à Branstar ci-dessus - merci Branstar!

  • Système d'exploitation: Windows Vista
  • Niveau: complètement nouveau sur Ruby on Rails
  • J'avais déjà installé Ruby 1.9.2

J'ai suivi les instructions dans Running Rails 3 sur Windows .

Tout a fonctionné jusqu'à la partie "rake db: migrate" qui m'a donné le même résultat que le post original.

L'Iran:

gem install rake

J'ai couru à nouveau:

rake db:migrate

Ensuite, j'ai pu démarrer le serveur Ruby on Rails et tout était en place.

Merci encore Branstar :-)


2

Je ressens pour toi (mikhailvs), c'est vraiment frustrant. Je deviens fou depuis presque une journée complète. J'ai même désinstallé Ruby et tous ses fichiers dépendants et j'ai arrêté mon PC, mais j'ai toujours le même problème.

Ce que j'ai obtenu du message d'erreur est le problème avec Rake 0.9.2. Il semble qu'il n'ait pas été complètement installé. J'ai donc dû réinstallergem install rake -v=0.9.2

Je n'étais pas sûr d'avoir installé rake –v0.9.1. Donc, pour être sûr que je suis 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, j'ai donc vérifié tous les répertoires Rake sur mon PC, et j'ai découvert que je n'avais que Rake 0.9.2. Ensuite, pour vérifier si tout s'est bien passé, j'ai migré avecrake db:migrate . Et cela a fonctionné :)

Je pense que je n'avais pas Rake 0.9.1 parce que j'ai nettoyé Ruby ( rubyinstaller-1.9.2-p180 - sur mon système Windows 7) et toutes les gemmes également. En attendant, Rake 0.9.2 n'était pas complètement installé.


2

La désinstallation avec "gem uninstall rake" a fonctionné pour moi, j'avais 2 versions installées, donc j'ai plaisanté en faisant une réinstallation propre.

"rake db: create" , pour s'assurer que la base de données existe, puis "rake db: migrate" pour sceller l'accord.


2

J'ai eu le même problème avec Rake 0.9.2.2. J'ai résolu ce problème en utilisant bundle exec.



0

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, utilisez

$ bundle exec rake db:migrate

Je crois que ceci vous aidera ;)


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.