Was ist die 'Umwelt'-Aufgabe in Rake?

120

Laut " Custom Rake Tasks ":

desc "Pick a random user as the winner"
task :winner => :environment do
  puts "Winner: #{pick(User).name}"
end

Soweit ich weiß, :winner => :environmentbedeutet das " environmentvorher tun winner". Aber was ist environment? Wann soll ich es benutzen?

Ich habe es versucht rake -T, aber in der Liste konnte ich nicht finden environment.

Lai Yu-Hsuan
quelle
Überprüfen Sie die neue Syntax stackoverflow.com/questions/12493337/…
Jahan

Antworten:

120

Sie können auf Ihre Modelle und sogar auf Ihre gesamte Umgebung zugreifen, indem Sie Aufgaben von der Umgebungsaufgabe abhängig machen. Auf diese Weise können Sie Dinge wie tun run rake RAILS_ENV=staging db:migrate.

Siehe " Benutzerdefinierte Rechenaufgaben ".

Sameer C.
quelle
4
Wo ist es in der Quelle definiert? Ich habe herausgefunden, wo sich die Rechenaufgaben befinden, und ich habe eine leere Aufgabendefinition gefunden, die von 'app: environment' abhängt, aber ich kann die Definition der Aufgabe app: environment nicht finden. github.com/rails/rails/blob/master/railties/lib/rails/tasks/…
Odigity
4
@odigity Sieht aus wie hier: github.com/rails/rails/blob/v4.2.4/railties/lib/rails/…
Carson Reinke
41

Es wird in Ihre Rails-Umgebung geladen, sodass Sie Ihre Modelle tatsächlich verwenden können und was nicht. Ansonsten hat es keine Ahnung von diesen Dingen.

Wenn Sie also eine Aufgabe erstellt haben, die gerade ausgeführt wurde, puts "HI!"müssen Sie die :environmentAufgabe nicht zu den Abhängigkeiten hinzufügen . Aber wenn Sie so etwas User.find(1)gut machen wollen, brauchen Sie es.

MrDanA
quelle
35

Durch das Einschließen => :environmentwird Rake angewiesen, die Anwendungsumgebung vollständig zu laden und der entsprechenden Aufgabe Zugriff auf Dinge wie Klassen, Helfer usw. zu :environmentgewähren . Ohne diese Option haben Sie keinen Zugriff auf diese Extras.

Auch => :environmentnicht selbst zur Verfügung stellen alle umweltrelevanten Variablen, zum Beispiel environment, @environment, RAILS_ENVetc.

Lars Levie
quelle
Die Methode des Aufgabendokuments ist zu einfach, um es zu verstehen.
Albert.Qing