¿Cuál es la tarea de "entorno" en Rake?

120

Según " Tareas personalizadas de rake ":

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

Hasta donde yo sé, los :winner => :environmentmedios "hacer environmentantes winner". Pero lo que es environment? ¿Cuándo debo usarlo?

Lo intenté rake -T, pero en la lista no pude encontrar environment.

Lai Yu-Hsuan
fuente
Consulte la nueva sintaxis stackoverflow.com/questions/12493337/…
Jahan

Respuestas:

120

Puede obtener acceso a sus modelos y, de hecho, a todo su entorno haciendo que las tareas dependan de la tarea del entorno. Esto te permite hacer cosas como run rake RAILS_ENV=staging db:migrate.

Ver " Tareas personalizadas de rake ".

Sameer C
fuente
4
¿Dónde está definido en la fuente? Encontré dónde están las tareas de rake y encontré una definición de tarea vacía que depende de 'app: environment', pero no puedo encontrar la definición de la tarea app: environment. github.com/rails/rails/blob/master/railties/lib/rails/tasks/…
odigity
4
@odigity Parece aquí: github.com/rails/rails/blob/v4.2.4/railties/lib/rails/…
Carson Reinke
41

Se carga en su entorno Rails para que pueda usar sus modelos y lo que no. De lo contrario, no tiene ni idea de esas cosas.

Entonces, si realizó una tarea que acaba de puts "HI!"hacer, no necesita agregar la :environmenttarea a las dependencias. Pero si desea hacer algo User.find(1)así, lo necesitará.

MrDanA
fuente
35

La inclusión => :environmentle dirá a Rake que cargue por completo el entorno de la aplicación, dando a la tarea relevante acceso a cosas como clases, ayudantes, etc. Sin el :environment, no tendrá acceso a ninguno de esos extras.

También => :environmenten sí no pone a disposición ninguna de las variables relacionadas con el ambiente, por ejemplo environment, @environment, RAILS_ENV, etc.

Lars Levie
fuente
El método del documento de la tarea es demasiado simple para entenderlo.
Albert.Qing