2012-03-13 10 views
12

Estoy tratando de encontrar la mejor manera de ejecutar scripts en segundo plano. He estado mirando alrededor y encontré muchas opciones, pero muchos/la mayoría parecen haberse vuelto inactivos en los últimos años. Déjame describir mis necesidades.¿El mejor método de la tarea del fondo de los carriles actuales?

los rieles aplicación es básicamente un front-end para configurar cuándo y cómo se van a ejecutar estos scripts. Los scripts se ejecutan y generan informes y envían alertas por correo electrónico. Por lo tanto, el usuario debe poder configurar los tiempos de inicio y la frecuencia con la que estos scripts se ejecutarán dinámicamente. Los propios scripts deben tener acceso al entorno de los rieles para guardar los informes resultantes en el DB.

Estoy tratando de descubrir el mejor método entre la gran variedad de opciones.

+0

¿qué tal trabajos activos? Acabo de leer, pero parece prometedor. – akostadinov

Respuesta

12

Creo que está buscando un sistema de cola de trabajos en segundo plano.

Para eso, o estás buscando resque o delayed_job. Ambas soportan tareas de programación en algún momento en el futuro - delayyed_job hace esto de forma nativa, mientras que resque tiene un complemento llamado resque_scheduler.

Se podría poner en cola trabajos en el fondo con los parámetros que se especifican, y luego en el momento seleccionado que van a ser ejecutados. Puede configurar trabajos para que se repitan indefinidamente o un número fijo de veces (al menos con resque-scheduler, no estoy seguro acerca de retaryed_job).

delayed_job es más fácil de configurar, ya que guarda todo en la base de datos. resque es más robusto pero requiere que tenga redis en su pila, pero si lo hace ya es la solución ideal para su problema.

6

Tome un vistazo a la joya siempre en https://github.com/javan/whenever.

Le permite programar tareas como trabajos cron.

Funciona muy bien en Linux, y el último compromiso fue hace 14 días. Un amigo mío lo usó en un proyecto y estaba bastante satisfecho con él.

edición: echar un vistazo a la gema delayed_job así, es bueno para la ejecución de las tareas largas en el fondo. Útil cuando se crea un trabajo cron solo para iniciar otras tareas.

+0

Vi esto, pero tal vez no entiendo cómo usarlo exactamente, parece que crea estaticamente sus tareas en el archivo schedule.rb. Entonces, ¿podría modificar mis trabajos en tiempo de ejecución? Básicamente, quiero esto, pero quiero que sea configurable desde mi aplicación de rieles por el usuario. –

+0

La solución simple sería pensar en el período mínimo de los trabajos programados del usuario. Si ejecutar todas las tareas pendientes cada hora será suficiente para sus necesidades, puede hacer que una tarea cron se ejecute cada hora, o cada diez minutos, iterar sobre la lista de trabajos pendientes, ejecutando los que deberían ser. Es mucho más simple que intentar 'metaprogramaticamente' crear un crontab o algo así. Si ese no es el caso, bueno, buena suerte :) – Castilho

12

recientemente he aprendido acerca de Sidekiq, y creo que es realmente grande.

También hay un Railscast respecto - Sidekiq.

Cuestiones relacionadas