Ruby on Rails- und Rake-Probleme: Nicht initialisierte Konstante Rake :: DSL


189

Ich habe ein wirklich frustrierendes Problem: Rake ist dumm.

So entsteht das Problem:

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

Beide funktionieren gut, aber wenn ich das mache,

$ rake db:migrate

Ich erhalte den folgenden Fehler.

(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>'

Ich habe im Internet nach ähnlichen / gleichen Fehlern gesucht, und die Leute haben sie gehabt. Nur scheint niemand jemals das Problem zu lösen!

Wie behebe ich dieses Problem?

Antworten:


193

Ein Tweet von DHH früher. Rake .9.0 bricht Rails und einige andere Dinge, die Sie benötigen:

gem "rake", "0.8.7"

in deiner Gemfile.


17
Das hat bei mir funktioniert. Ich musste es bundle update rakezuerst tun . Dann habe ich nachgefragt bundle show rake. Es sollte 0.8.7 sagen. Dann rake db:migrate.
B Sieben

26
Oder noch besser : gem "rake", "!= 0.9.0". Dies vermeidet die fehlerhafte Version 0.9.0, wird jedoch auf eine neuere Version aktualisiert, sobald eine neuere Version veröffentlicht wird (das spätere Entfernen wird nicht schaden, aber das Beibehalten sollte auch nicht schaden).
Spiralis

6
@Spiralis Ich bin auch auf das Problem mit Version 0.9.2 gestoßen. Daher müssen Sie diese Zeile möglicherweise für einige Versionen hinzufügen.
Dharmatech

3
Diese Lösung hat bei mir funktioniert. Wie bei @dharmatech ist dieses Problem aufgetreten heroku rake db:migrateund dies schien es zu beheben.
Denken Sie

1
Dies mag für Rails funktionieren, aber ich musste auch sudo gem install rakesicherstellen, dass die rakeVersion, die ich über die Befehlszeile aufrief, nicht 0.8.7 war.
Autumnsault

72

Ich habe kurz nach meiner vorherigen Antwort einige Nachforschungen angestellt (Entschuldigung, ich muss es vorher tun).

Alle Probleme werden mit Rake Gem 0.9.2 gelöst. Ich habe die folgenden Schritte ausgeführt:

  • Ich habe installiert gem install rake -v=0.9.2(ich hatte das Juwel 0.9.1)
  • entfernte die 0.9.1 mit gem uninstall rake -v=0.9.1
  • aktualisiert mit bundle update
  • dann db:migratezeigte das eine Warnung,WARNING: Global access to Rake DSL methods is deprecated. Please....

    Es wurde gelöst, indem der Rake-Datei Folgendes hinzugefügt wurde.

    module ::YourApplicationName  
      class Application
        include Rake::DSL
      end
    end
  • Ich habe die module ::RakeFileUtils extend Rake::FileUtilsExtendvon @databyte vorgeschlagene Option weggelassen.

Dies bedeutet, dass der Rake-Edelstein 0.9.2 gut funktioniert!


Befolgte die ersten drei Schritte und ich bekam keine Warnung, also kümmerte ich mich nicht um den Rest. Danke für den Vorschlag!
Abe Petrillo

1
Dies bittet mich zu fragen ... Warum sollte ich Rake hacken, um diese Funktion beizubehalten? Was versucht Rake zu tun und was soll ich jetzt verwenden?
Ryanmt

@Arrumaco, Wie lautet das Verzeichnis für die Rake-Datei?
Ctak

Es ist erwähnenswert, dass die Ergänzung zu dem sein RakeFilesollte, bevor require 'rake'- erwischte mich :)
Ciaran Archer

12
das gleiche Problem, aber ich hatte bereits Rechen (0.9.2, 0.8.7). Eine Neuinstallation von 0.9.2 scheint das Problem zu beheben: 1) gem uninstall rake -v=0.9.22)gem install rake -v=0.9.2
DK.

54

Ich habe Kapitel 2 von Railstutorial (demo_app) durchgesehen und bin auf dieses Problem gestoßen. Ich habe alle anderen hier aufgeführten Antworten ausprobiert, konnte sie aber erst zum Laufen bringen:

Fügen Sie dies in Ihr Rakefile oben ein und benötigen Sie 'Rake':

require 'rake/dsl_definition'

via Wie behebt man das nicht initialisierte konstante Rake :: DSL-Problem auf Heroku?

Ich habe auch alle Dateien erneut festgelegt und an Github und Heroku gesendet.


Dies scheint die beste Antwort zu sein, da ein Downgrade von 0.9.2 auf 0.8.7 je nach Fall einige Edelsteinabhängigkeiten aufheben würde, wie z. B. meine :) Danke!
Diego Salazar

Es funktioniert nicht bei mir. Ich bekomme "keine solche Datei zum Laden - Rake / dsl_definition", wenn ich Rake db: create
KMC

25

Alles was ich tun musste war zu benutzen:

gem install rake

Ich hatte bereits Version 0.9.2, musste nur installiert werden.


Wow, es hat bei mir funktioniert. Aber können Sie erklären, warum ich Rake installieren muss, während Rake bereits vorhanden sein sollte?
KMC

Ich bin noch kein wirklicher Experte, aber ich verstehe, dass es einen Unterschied zwischen dem "Installieren" von Edelsteinen auf Ihrem PC und dem "Installieren" von Edelsteinen in einer Edelsteinregistrierung gibt - ich vermute, dies liegt daran, dass die Ruby-Installation wissen muss, welche Edelsteine ​​es sind wo auf deinem PC. Vielleicht ist dies etwas, das in Zukunft automatisiert werden könnte oder bereits in bestimmten Ruby-Distributionen automatisiert ist ...
Branstar

19

Installieren Sie den Rechen-Edelstein neu und es sollte gut funktionieren:

gem uninstall rake -v=0.9.2 
gem install rake -v=0.9.2

Wenn nicht, geben Sie die Version '0.8.7' in Ihrer Gemfile an.


Dieser Ansatz hat bei mir funktioniert und ich habe es vorgezogen, die Version nicht herabstufen zu müssen.
Tarnschaf

Arbeitete auch für mich, nur für Rechen -v 0.9.2.2
Haspemulator

10

Wenn Sie Bundler nicht verwenden:

sudo gem install rake -v 0.8.7
sudo gem uninstall rake

Dann deinstallieren Sie 0.9.0.


dies hat es für mich ohne Bündler behoben (Schienen 2.3.8). Hatte versucht, Rake 0.9.2 zu installieren, aber das hat es nicht behoben. Die Installation von 0.8.7 und die Deinstallation von 0.9.2 haben bei mir endlich funktioniert.
Michael Durrant

8

Wenn Sie wie ich auf Rake 0.8.7 stecken bleiben und Rails 3.2.x verwenden, fügt railties eine Anforderung für Rake :: DSL hinzu

Um dies zu lösen, sollten Sie oben in Ihrem Rakefile Folgendes hinzufügen:

module Rake
  module DSL
  end
end

7

Ich habe das gleiche Problem mit den folgenden Schritten gelöst:

In Gemfile:

gem 'rake', '0.9.2'

Dann lief dies auf der Konsole:

sudo bundle update rake

Fügen Sie dann die folgenden Zeilen zu Rakefile hinzu:

require 'rake/dsl_definition'
include Rake::DSL


4

Ich hatte das gleiche Problem und musste den Rake 0.8.7 Edelstein anstelle von 0.9.0 verwenden.


4

Ich bin ein Windows XP-Benutzer und hatte das gleiche Problem.

Ich habe gem "rake", "0.8.7" in die gemfile eingegeben und dann im Befehlsfenster Folgendes eingegeben.

bundle update rake

Dies hat mein Problem behoben.


hat ab heute auch für mich gearbeitet. Ich versuche nur, Rails unter Win7 zu codieren.
Arscariosus

4
  1. Gehen Sie zu Ihrem Projektpfad
  2. Art bundle install --path=vendor/bundle
  3. Art bundle exec rake db:migrate

Um den Servertyp zu starten bundle exec rails s. Verwenden Sie Bundle Exec und Sie werden sicher sein, dass Sie die richtigen Edelsteine ​​(erforderliche Version) für Ihr Projekt verwenden. Außerdem würde ich empfehlen, dass Sie hinzufügen vendor/bundle, .gitignorewenn Sie gitAlias ​​für verwenden und erstellen bundle exec. Wenn Sie verwenden zsh, können Sie diesem Ansatz folgen


3

Gleich wie Branstar oben - danke Branstar!

  • Betriebssystem: Windows Vista
  • Level: Völlig neu bei Ruby on Rails
  • Ich hatte Ruby 1.9.2 bereits installiert

Ich habe die Anweisungen in Running Rails 3 unter Windows befolgt .

Alles hat bis zum Teil "rake db: migrate" funktioniert, der mir die gleiche Ausgabe wie der ursprüngliche Beitrag lieferte.

Ich rannte:

gem install rake

Ich rannte wieder:

rake db:migrate

Dann konnte ich den Ruby on Rails-Server starten und hatte alles an Ort und Stelle.

Nochmals vielen Dank Branstar :-)


2

Ich fühle für dich (mikhailvs), es ist wirklich frustrierend. Ich bin seit fast einem ganzen Tag verrückt geworden. Ich habe sogar Ruby und alle seine abhängigen Dateien deinstalliert und meinen PC heruntergefahren, aber ich habe immer noch das gleiche Problem.

Was ich aus der Fehlermeldung erhalten habe, ist das Problem mit Rake 0.9.2. Es scheint, als wäre es nicht vollständig installiert. Also musste ich neu installierengem install rake -v=0.9.2

Ich war mir nicht sicher, ob ich Rake –v0.9.1 installiert habe. Um sicherzugehen, dass ich in Sicherheit bin, habe ich versucht, diese alte Version mit zu entfernen gem uninstall rake -v=0.9.1. Aber mir wird die Fehlermeldung angezeigt

ERROR:  While executing gem ... (Gem::InstallError)
    cannot uninstall, check `gem list -d rake`

OK, also habe ich alle Rake-Verzeichnisse auf meinem PC überprüft und festgestellt, dass ich nur Rake 0.9.2 hatte. Um zu überprüfen, ob alles in Ordnung war, bin ich mit migriert rake db:migrate. Und es hat funktioniert :)

Ich glaube, ich hatte Rake 0.9.1 nicht, weil ich Ruby ( rubyinstaller-1.9.2-p180 - auf meinem Windows 7-System) und alle Edelsteine ​​neu installiert habe . In der Zwischenzeit war Rake 0.9.2 nicht vollständig installiert.


2

Die Deinstallation mit "gem uninstall rake" hat bei mir funktioniert. Ich hatte 2 Versionen installiert, also habe ich eine saubere Neuinstallation durchgeführt.

"rake db: create" , um sicherzustellen, dass die Datenbank vorhanden ist, und dann "rake db: migrate" , um den Deal zu besiegeln.


2

Ich hatte das gleiche Problem mit Rake 0.9.2.2. Ich habe dieses Problem mit Bundle Exec gelöst.



0

Installieren Sie Rake 0.8.7 und deinstallieren Sie 0.9.2.2

$ gem install rake -v 0.8.7
$ gem uninstall rake -v 0.9.2.2

Jetzt benutzen

$ bundle exec rake db:migrate

ich denke das wird dir helfen;)


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.