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?

HRÓÐÓLFR
quelle

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.

Caley Woods
quelle
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!

Arrumaco
quelle
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.

djblue2009
quelle
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.

Branstar
quelle
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.

hohner
quelle
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.

Travis Reeder
quelle
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
Jonathon Horsman
quelle
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
Gaurav Gupta
quelle
4

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

Paul
quelle
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.

Herr Anfänger
quelle
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

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

Zimini
quelle
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.

Egyamado
quelle
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.

Christopher
quelle
2

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

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

Anuj
quelle
0

Lauf

bundle exec rake db:migrate

Für mich geht das.

JakeGould
quelle