Der globale Zugriff auf Rake-DSL-Methoden ist veraltet

86

Ich arbeite mich durch das Ruby on Rails 3-Tutorial und habe Folgendes in die Befehlszeile eingegeben:

rake db:migrate

was die folgende Warnung erzeugte.

WARNING: Global access to Rake DSL methods is deprecated.  Please Include
    ...  Rake::DSL into classes and modules which use the Rake DSL methods.

WARNING: DSL method DemoApp::Application#task called at /Users/imac/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/railties-3.0.7/lib/rails/application.rb:215:in `initialize_tasks'

Ich bin mir nicht sicher, was ich dagegen tun oder wie ich damit arbeiten soll. Ich kenne keinen anderen Befehl für Rake.

Wie kann ich dieses Problem beheben?

chell
quelle

Antworten:

64

Ich fand dies in der Stapelüberlauffrage Ruby on Rails und Rake-Problemen: nicht initialisierte Konstante Rake :: DSL . Es bezieht sich auf einen @ DHH-Tweet.

Fügen Sie Folgendes in Ihre Gemfile ein

gem "rake", "0.8.7"

Sie können so etwas sehen

rake aborted!
You have already activated Rake 0.9.1 ...

Ich hatte noch eine Kopie von Rake 0.9.1 in meinem Verzeichnis, also habe ich sie gelöscht.

Sie können Rake 0.9.1 "löschen", indem Sie den folgenden Befehl ausführen:

gem uninstall rake -v=0.9.1

Wenn Sie mehrere Versionen des Edelsteins installiert haben, werden Sie aufgefordert, eine Version auszuwählen.

Nachdem 0.9.1 gereinigt war, rannte ich

bundle update rake

und konnte endlich meine Datenbankdateien erstellen. Ich habe verwendet rake db:create, aber es sollte auch funktionieren rake db:migrate.

Ich hoffe, es hilft.

Brian Bruijn
quelle
5
Das hat bei mir nicht funktioniert. Ich musste tatsächlich Rake 0.9.1 entfernen> Gem deinstallieren Rake -v = 0.9.1 und dann> Bundle-Update Danke Antonio
1
Ich stimme Antonio zu - als ich sagte, Rechen 0.9.1 zu entfernen, meinte ich mit gem uninstall rake -v=0.9.1. Mein Fehler, es nicht klar zu machen. Danke für die Klarstellung Antonio! Prost, Brian
Brian Bruijn
13
Ich denke nicht, dass es gut ist, absichtlich alte Bibliotheken zu verwenden, wenn neuere funktionieren können, siehe Kommentar unten.
Smar
2
Die einfachere Lösung ist die von NPatel unten vorgeschlagene. Fügen Sie Rakefile einfach eine Zeile hinzu.
Slobodan Kovacevic
Ich hatte mit dieser Entschließung kein Glück. Nach der Deinstallation von Rake 0.9.1 oder 0.9.2 und dem Ausführen des Bundle-Updates trat immer noch der gleiche Fehler auf.
Marc
111

Das Hinzufügen include Rake::DSLzum Rakefile vor dem Aufruf der Anwendungen load_tasks hat auch bei mir funktioniert.

Also im obigen Benutzerfall vor dem DemoApp::Application.load_tasksim Rakefile.

Patelifizieren
quelle
Vielen Dank. Behoben mein "WARNUNG: Der globale Zugriff auf Rake DSL-Methoden ist veraltet." Problem.
Slobodan Kovacevic
Ist dies der richtige Weg, um dieses Problem zu beheben?
Marc
2
@Marc, derzeit ist dies der einzige Fix, den ich kenne, ohne ein Upgrade auf Rails 3.0.8 oder höher durchzuführen. Dieses Problem wurde in dieser Version behoben: github.com/rails/rails/commit/… . Wenn Sie eine bessere Lösung finden, lassen Sie es mich bitte wissen. Außerdem würde ich laut der Warnung denken, dass es die richtige Lösung ist.
Patelify
1
Dies ist die Lösung, mit der ich mich entschieden habe. Ich würde es vorziehen, einfach die Zeile hinzuzufügen, als Spiele zu spielen, mit welcher Version von Rake mit was funktioniert.
Jaydel
2
Dies funktionierte für mich mit 1.9.2 und Rails 3.0.7 mit Rake 0.9.2
Steven Chanin
5

Ich hatte das gleiche Problem unter Windows mit dem Installationsprogramm. Ruby 1.9.2 und Rails 3.0.9. Folgendes habe ich getan:

bundle update rake
bundle show rake

Danach habe ich Rake 0.9.2 ausgeführt.

Dann habe ich das Rakefile im Anwendungsstammordner wie folgt aktualisiert:

require File.expand_path('../config/application', __FILE__)
require 'rake'
# If you named your application something other than SampleApp, change that below
module ::SampleApp
    class Application
        include Rake::DSL
    end
end

module ::RakeFileUtils
    extend Rake::FileUtilsExt
end

SampleApp::Application.load_tasks

Stellen Sie, wie im Kommentar angegeben, sicher, dass der Name Ihrer App in den beiden entsprechenden Zeilen oben korrekt ist.

LikeMaBell
quelle
1
Und damit der heroku rake db:migrateBefehl funktioniert, musste ich auch die require 'rake/dsl_definition'Rake-Datei hinzufügen (über der erforderlichen 'Rake'-Zeile).
LikeMaBell
All dies zu tun funktioniert für mich, wird aber nicht benötigt. Der Vorschlag von NPatel hat es gut gemacht.
Scott Swezey
0

Wenn Sie dies in späteren Versionen von Rails (wie 3. +) sehen, möchten Sie möglicherweise auch überprüfen, ob Ihre Umgebung sauber ist, indem Sie RVM http://beginrescueend.com/ verwenden und ein bestimmtes Ruby & Gemset für Ihre Projekte erstellen.

Verwenden Sie pro Projekt eine .rvmrc-Datei. Dies garantiert, dass Sie keine älteren Systemedelsteine ​​in Ihre Projekte aufnehmen. Welches hat mich schon mal gebissen.

Dies verhindert, dass Sie mit generierten Rakefiles und dergleichen herumspielen müssen.

Jim Munro
quelle
0

bundle exec rake db: migrate löst Probleme mit der Ruby-Version

Galuga
quelle
Dies funktioniert nur, wenn Sie eine funktionierende Version von Rake in Ihrem Gemfile haben und die Eingabe von "Rake" eine andere Version verwendet, die in Ihrem PATH installiert ist
RyanHennig