Jakie jest zadanie „środowiska” w Rake?

120

Zgodnie z „ Custom Rake Tasks ”:

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

O ile wiem, :winner => :environmentoznacza to „zrób environmentwcześniej winner”. Ale co to jest environment? Kiedy powinienem go używać?

Próbowałem rake -T, ale na liście nie mogłem znaleźć environment.

Lai Yu-Hsuan
źródło
Sprawdź nową składnię stackoverflow.com/questions/12493337/ ...
Jahan

Odpowiedzi:

120

Możesz uzyskać dostęp do swoich modeli, a właściwie do całego środowiska, uzależniając zadania od zadania środowiska. To pozwala robić takie rzeczy jak run rake RAILS_ENV=staging db:migrate.

Zobacz „ Niestandardowe zadania prowizji ”.

Sameer C
źródło
4
Gdzie jest to zdefiniowane w źródle? Znalazłem, gdzie znajdują się zadania rake, i znalazłem pustą definicję zadania, która zależy od „app: environment”, ale nie mogę znaleźć definicji app: environment task. github.com/rails/rails/blob/master/railties/lib/rails/tasks/…
odigity
4
@odigity Wygląda jak tutaj: github.com/rails/rails/blob/v4.2.4/railties/lib/rails/…
Carson Reinke
41

Ładuje się w środowisku Railsów, więc możesz używać swoich modeli, a co nie. W przeciwnym razie nie ma pojęcia o tych rzeczach.

Więc jeśli wykonałeś zadanie, które właśnie się wykonało puts "HI!", nie musisz dodawać :environmentzadania do zależności. Ale jeśli chcesz zrobić coś User.find(1)dobrze, to będzie tego potrzebować.

MrDanA
źródło
35

Włączenie => :environmentspowoduje, że Rake załaduje pełne środowisko aplikacji, dając odpowiednim zadaniom dostęp do takich rzeczy, jak klasy, pomocnicy, itp. Bez tego :environmentnie będziesz mieć dostępu do żadnego z tych dodatków.

Również => :environmentsama nie udostępniają wszelkie zmienne związane ze środowiskiem, na przykład environment, @environment, RAILS_ENV, itd.

Lars Levie
źródło
Metoda dokumentu zadania jest zbyt prosta, aby go zrozumieć.
Albert. Qing