2011-08-12 10 views
89

Según "Custom Rake Tasks":¿Cuál es la tarea de 'medio ambiente' en Rake?

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

Por lo que yo sé, el :winner => :environment significa "hacer environment antes winner". Pero, ¿qué es environment? ¿Cuándo debería usarlo?

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

+0

Mira la nueva sintaxis http://stackoverflow.com/questions/12493337/rake-aborted-undefined-method-map-for-namesymbol –

Respuesta

88

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

Ver "Custom Rake Tasks".

+3

Dónde se define 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 aplicación: tarea de entorno. https://github.com/rails/rails/blob/master/railties/lib/rails/tasks/engine.rake – odigity

+0

@odigity Se parece aquí: https://github.com/rails/rails/blob/v4. 2.4/railties/lib/rails/application.rb # L454 –

31

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

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

22

Incluyendo => :environment le 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.

Además, el propio => :environment no pone a disposición ninguna variable relacionada con el entorno, p. environment, @environment, RAILS_ENV, etc.

+0

El método del documento de la tarea es demasiado simple para entenderlo. –

Cuestiones relacionadas