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?

HRÓÐÓLFR
la source

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.

Caley Woods
la source
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!

Arrumaco
la source
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.

djblue2009
la source
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.

Branstar
la source
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.

Hohner
la source
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.

Travis Reeder
la source
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
Jonathon Horsman
la source
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
Gaurav Gupta
la source
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.

Paul
la source
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.

M. Débutant
la source
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

ka8725
la source
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 :-)

zimini
la source
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é.

egyamado
la source
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.

Christophe
la source
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.

Sean Kibler
la source
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 ;)

Anuj
la source
0

Courir

bundle exec rake db:migrate

ça marche pour moi.

JakeGould
la source