Un trabajo cron para rieles: ¿mejores prácticas?
¿Cuál es la mejor manera de ejecutar tareas programadas en un entorno Rails? ¿Guión/corredor? ¿Rastrillo? Me gustaría ejecutar la tarea cada pocos minutos.
He usado el extremadamente popular Whenever en proyectos que dependen en gran medida de tareas programadas, y es genial. Le brinda un buen DSL para definir sus tareas programadas en lugar de tener que lidiar con el formato crontab. Del archivo LÉAME:
Siempre es una gema de Ruby que proporciona una sintaxis clara para escribir e implementar trabajos cron.
Ejemplo del archivo LÉAME:
every 3.hours do
runner "MyModel.some_process"
rake "my:rake:task"
command "/usr/bin/my_great_command"
end
every 1.day, :at => '4:30 am' do
runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
end
Estoy usando el enfoque de rake (según lo respalda heroku )
Con un archivo llamado lib/tasks/cron.rake ..
task :cron => :environment do
puts "Pulling new requests..."
EdiListener.process_new_messages
puts "done."
end
Para ejecutar desde la línea de comando, esto es simplemente "rake cron". Este comando se puede colocar en el cron/programador de tareas del sistema operativo según se desee.
¡ Actualice esta es una pregunta y respuesta bastante antiguas! Alguna información nueva:
- el servicio cron heroku al que hice referencia ha sido reemplazado por Heroku Scheduler
- para tareas frecuentes (especialmente cuando desea evitar el costo de inicio del entorno Rails), mi enfoque preferido es usar el cron del sistema para llamar a un script que (a) creará una API de webhook segura/privada para invocar la tarea requerida en segundo plano. o (b) poner directamente en cola una tarea en el sistema de cola de su elección