планирование задач в приложении rails 3 - PullRequest
1 голос
/ 26 марта 2011

Я пишу приложение rails 3, которое требует выполнения небольших задач по индивидуальному расписанию для каждого пользователя.Запланированные задачи будут определены динамически.Прямо сейчас мой план состоит в том, чтобы использовать Resque Scheduler с Redis.

После того, как я установил расписание для конкретной задачи (например, запускать задачу А каждые 48 часов), я хотел бы запускать эту задачу на неопределенный срок.Поэтому я хотел бы сохранить эти расписания в БД или в другом месте, поэтому в случае сбоя приложения при перезапуске оно снова загружает эти задачи в очередь.

Это то, что Resque поддерживает по умолчанию, сохраняя его в redis, или мне нужно написать свою собственную вещь?Я также смотрел на ruby-taskr (http://code.google.com/p/ruby-taskr/). Я не уверен, поддерживает ли Taskr сохранение его в базе данных и его регистрацию при запуске?

Также было бы полезно, если есть приложения / демо, которые я могупосмотрите на это.

Спасибо

1 Ответ

1 голос
/ 05 мая 2011

У меня есть аналогичная настройка для пакетных заданий. Пользователь добавляет их на веб-панель управления, и они запускаются, как часто указывается.

Я использую active-record для хранения определений планирования, использую resque для выполнения и одну запись cron для постановки в очередь с помощью задачи rake.

так что тогда в грабли задача:

to_run = Report.daily
to_run += Report.weekly if Time.now.monday?
to_run += Report.monthly if Time.now.day == 1

to_run.each{|r| r.enqueue!}

, где ежедневно, еженедельно, ежемесячно указываются области действия модели:

class Report < ActiveRecord::Base
  scope :daily, where(:when_to_run => 'daily')
  scope :weekly, where(:when_to_run => 'weekly')
  scope :monthly, where(:when_to_run => 'monthly')
end

Это немного глупо, но работает хорошо, и я хорошо остаюсь в стеке. Надеюсь, что это полезно

...