Ich arbeite das Ruby on Rails 3 Tutorial Book durch und tippe folgendes in die Kommandozeile:
rake db:migrate
welches 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/[email protected]/gems/railties-3.0.7/lib/Rails/application.rb:215:in `initialize_tasks'
Ich bin nicht sicher, was ich dagegen tun soll oder wie ich damit arbeiten soll. Ich kenne keinen anderen Befehl für Rake.
Wie kann ich dieses Problem beheben?
Ich fand dies in der Stapelüberlauf-Frage Ruby on Rails und Rake-Probleme: nicht initialisierte Konstante Rake :: DSL. Es bezieht sich auf ein @ 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 Gems installiert haben, werden Sie aufgefordert, eine Version auszuwählen.
Nachdem 0.9.1 bereinigt war, lief ich
bundle update rake
und konnte endlich meine Datenbankdateien erstellen. Ich benutzte rake db:create
, aber es sollte funktionieren für rake db:migrate
auch.
Ich hoffe, es hilft.
Das Hinzufügen von include Rake::DSL
Zum Rakefile, bevor die Anwendungen load_tasks aufgerufen wurden, hat auch für mich funktioniert.
Also im obigen Fall des Benutzers vor dem DemoApp::Application.load_tasks
Im Rakefile.
Ich hatte unter Windows das gleiche Problem mit dem Installationsprogramm. Ruby 1.9.2 und Rails 3.0.9. Hier ist, was ich getan habe:
bundle update rake
bundle show rake
Danach lief ich mit Rake 0.9.2.
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.
bundle exec rake db: migrate löst Ihre Ruby Versionsprobleme
Wenn Sie dies in späteren Versionen von Rails (wie 3. +) sehen, können Sie auch mithilfe von RVM http://beginrescueend.com) überprüfen, ob Ihre Umgebung sauber ist / und ein spezielles Ruby & Gemset für Ihre Projekte erstellen.
Verwenden Sie eine .rvmrc-Datei für jedes Projekt. Dadurch wird sichergestellt, dass Sie keine älteren System-Gems in Ihre Projekte integrieren. Welches hat mich schon mal gebissen.
Dies verhindert, dass man mit generierten Rakefiles & so herumalbern muss.