ruby-on-rails ruby calendar scheduling recurring

ruby on rails - ¿Cómo modelar y almacenar tareas recurrentes en los rieles?



ruby-on-rails calendar (4)

Las soluciones de Cron en rieles son numerosas y bastante buenas. Eso no es con lo que estoy luchando aquí.

En cambio, lo que estoy teniendo problemas es dejar que los usuarios creen sus propias tareas recurrentes (como recordatorios); específicamente cómo modelarlos y almacenarlos en el DB (una buena IU porque tampoco es trivial) sería increíble si hubiera código para eso). El calendario de Google es un gran ejemplo aquí (la UI para agregar un evento, no el calendario completo) ... deberían poder hacer todos los días a la 1pm CST, o mon / wed / fri, o semanalmente, etc. Cualquier solución cron es ser utilizado tendría que sondear la base de datos para ver qué recordatorios debían enviarse a esa hora, etc.

¿Alguien ha visto un buen complemento / joya para esto en los rieles? Parece que habría algo por ahí, pero aún no lo he encontrado.

¡Gracias!


Actualmente está pensando en utilizar un complemento como este para almacenar recurrencias en una tabla http://github.com/fnando/recurrence/tree/master

cada recordatorio tendría un objeto de recurrencia, y el recordatorio también mantendría un campo de fecha y hora cuando se supone que debe enviar el próximo. Entonces el cron podría ...

get all reminder''s whose "next_send" date has passed for each reminder send it update the "next_send" field using the recurrence object end

Si hay mejores soluciones o voy por el camino equivocado, la entrada siempre se agradece.


Siempre he encontrado que las soluciones ical (el RFC, no el programa) son el mejor enfoque para trabajar con eventos recurrentes. Hay algunas buenas bibliotecas de Ruby para tratar con ical, y el chico más nuevo en el bloque es ri_cal .


Terminé rodando mi propia solución ya que no necesitaba nada súper elegante.

Básicamente, agregué una next_run datetime e interval string a la base de datos que era una de (día, semana, etc.). A continuación, configure una tarea cron para ejecutar que busque las fechas next_run que hayan pasado. Los ejecuta y luego establece next_run en algún punto en el futuro en función de la columna de interval .

Simple pero funcionó para mis necesidades.


Actualmente estoy teniendo este problema y la solución que estoy considerando es la siguiente:

class AllowReoccuringTasks < ActiveRecord::Migration def self.up add_column :tasks, :reoccuring, :boolean add_column :tasks, :period, :integer end end

donde el período puede ser 1 (todos los días), 7 (cada semana) o 14 (cada dos semanas).

Si desea admitir otros tipos de programas, como por ejemplo, todos los meses, días de la semana, fines de semana, etc., puede agregar una columna llamada "programación" y usar constantes para representar diferentes tipos de programación. También puedes usar el enum plugin .