2011-08-01 9 views
11

Quiero crear eventos recurrentes usando la gema Ice Cube en Rails - mi pregunta es, ¿cómo puedo usar esto de manera correcta o eficiente? reglas para desencadenar eventos reales?Manera correcta de usar eventos creados con Ice Cube in Rails usando un trabajo cron diario

Un ejemplo de esto sería una factura recurrente.

Supongamos que tengo una repetición de Ice Cube una vez por semana y la guardé en una fila de factura recurrente con to_yaml. Ahora tengo una fila en la base de datos con una regla de periodicidad serializada. La única forma en que me imagino usar esto es recorrer todas y cada una de las filas de la base de datos, deserializar las reglas de recurrencia guardadas y verificar si necesita ejecutarse hoy con schedule.occurs_on? (Date.new) - esto luego se pondría en una tarea programada que se ejecuta diariamente:

items = RecurringItem.find(:all) 
items.each do |item| 
    schedule = Schedule.from_yaml(item.schedule_yaml) 
    if schedule.occurs_on?(Date.new) 
     #if today is a recurrence, do stuff! 
    end 
end 

Esto se ve terriblemente ineficiente para mí - pero podría estar haciendo completamente mal. ¿No hay una mejor manera de usar Ice Cube?

+0

Intenta mirar el momento, es bastante simple de usar y funciona. https://github.com/javan/whenever – MatthewFord

+0

No estoy familiarizado con Ice Cube pero usamos Resque Scheduler en mi trabajo de forma recurrente (juego de palabras). Envíame un correo electrónico si tienes la tentación de probarlo y necesitas ayuda. – Tass

Respuesta

2

cubo de hielo parece especializarse en la creación de horarios muy complicados (se produce en los 1º y 4º miércoles, pero sólo si son los días pares, y si no un fin de semana, etc.)

si eso es lo usted necesita, entonces la tarea que describió probablemente ES la forma más eficiente de ejecutar una serie de tareas todos los días en ese tipo de horario complejo. Si no necesitas esa complejidad en tus horarios, entonces podrías mirar algo como siempre (como mencionó Matthew Ford), que solo usa cronogramas cron para configurar tareas para ser ejecutadas, pero eso es para tareas de tipo administrativo, y por lo tanto requiere un archivo de configuración para editar, y no funciona si necesita agregar y eliminar cosas a través de la interfaz de la aplicación.

Otra opción para usar Ice Cube sería tener un cron mensual para cada una de las agendas, y configurar otra tabla que defina qué eventos se deben ejecutar en qué días para el próximo mes. (cada fila tiene una fecha y una definición de tarea), y su cron diario podría seleccionar de esa tabla ...

También debería actualizar esa tabla con un mes de anticipación cada vez que se cambiara uno de los horarios la aplicación ... una especie de molestia, así que a menos que tengas cientos de miles de horarios para revisar una vez al día, probablemente no valga la pena.

+3

Terminé escribiendo mi propio planificador simple. Obtiene todas las filas que deben ejecutarse hoy, haga lo que sea necesario hacer con la fila y luego establece la fila siguiente fecha de ejecución en hoy + mes/semana/día, dependiendo de a qué se haya configurado. –

0

Dado que utiliza ice_cube, puede consultar Sidetiq. Utiliza ice_cube para especificar la programación de trabajos, por lo que sería fácil para ti.

En lugar de verificar todos los registros para encontrar el elegible, mi intento sería generar eventos programados basados ​​en estas reglas, pero creo que hay muchas formas de hacerlo. Puede ser más eficiente.

Cuestiones relacionadas