Правильный способ использования событий, созданных с помощью Ice Cube в Rails, с использованием ежедневного задания cron - PullRequest
12 голосов
/ 01 августа 2011

Я хочу создавать повторяющиеся события, используя гем Ice Cube в Rails - мой вопрос: как мне тогда правильно или, скорее, эффективно использовать эти повторяющиеся правила для запуска реальных событий?

Примером этогобудет повторяющийся счет-фактура.

Скажем, у меня установлен набор повторений Ice Cube раз в неделю, и я сохранил его в строке повторяющегося счета-фактуры, используя to_yaml.Теперь у меня есть строка в базе данных с сериализованным правилом повторения.Единственный способ, который я могу себе представить, используя это, состоит в том, чтобы выполнить каждую строку в базе данных, десериализовать сохраненные правила повторения и проверить, нужно ли запускать его сегодня с schedule.occurs_on? (Date.new) - тогда это будет помещеноcronjob, который работает ежедневно:

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

Это выглядит ужасно неэффективно для меня - но я могу сделать это совершенно неправильно.Нет ли лучшего способа использовать Ice Cube?

Ответы [ 2 ]

3 голосов
/ 19 апреля 2012

Ice Cube, кажется, специализируется на настройке очень сложных расписаний (происходит в 1-е и 4-е среды, но только если они даже сочтены, а не в выходные и т. Д.)

Если это то, что вам нужно, то описанная вами задача, вероятно, является наиболее эффективным способом ежедневного выполнения ряда задач по такому сложному расписанию. Если вам не нужна такая сложность в ваших расписаниях, то вы можете посмотреть на что-то похожее (как упомянул MatthewFord), которое просто использует расписания cron для настройки выполняемых задач, но это предназначено для задач типа администратора и поэтому требует файл конфигурации, который нужно отредактировать, и он не работает, если вам нужно добавлять и удалять вещи через интерфейс приложения.

Еще один вариант использования Ice Cube - ежемесячный крон должен проходить по каждому расписанию и настраивать другую таблицу, определяющую, какие события должны выполняться в какие дни в следующем месяце. (у каждой строки есть дата и определение задачи), и ваш ежедневный хрон может выбрать из этой таблицы ...

Вам также придется обновлять эту таблицу на один месяц раньше времени каждый раз, когда в приложении изменяется одно из расписаний ... что-то вроде хлопот, так что если у вас нет сотен тысяч расписаний для просмотра один раз в день , это, вероятно, не стоит беспокоиться.

0 голосов
/ 04 сентября 2014

Поскольку вы используете ice_cube, вы можете посмотреть на Sidetiq . Он использует ice_cube для задания расписания заданий, поэтому вам будет легко освоиться.

Вместо того, чтобы проверять все записи, чтобы найти подходящую, моя попытка будет заключаться в том, чтобы генерировать запланированные события на основе этих правил, но я думаю, что есть много способов сделать это, может быть более эффективным.

...