Долгосрочные задачи в Rails - PullRequest
       33

Долгосрочные задачи в Rails

1 голос
/ 23 февраля 2010

У меня есть контроллер, который генерирует отчеты HTML, XML и CSV.Запросы, используемые для этих отчетов, возвращают свой результат более минуты.

Каков наилучший подход для выполнения этих задач в фоновом режиме, а затем для возврата результата пользователю?Я посмотрел в Backgroundrb.Есть ли что-нибудь более базовое для моих нужд?

1 Ответ

5 голосов
/ 23 февраля 2010

Вы можете посмотреть на использование DelayedJob для выполнения этих запросов за вас и получить дополнительную таблицу с именем "NotificationQueue". Когда задание завершено (с его набором результатов), сохраните набор результатов и идентификатор пользователя человека, который сделал этот запрос, в таблице NotificationQueue. затем при каждой загрузке страницы (и, если хотите, каждые 15-20 секунд), опросите эту базу данных и посмотрите, есть ли какие-либо выполненные запросы.

DelayedJob действительно хорош, потому что вы пишете свой код, как будто он не будет отложенной работой, и просто измените код, чтобы сделать следующее:

#Your method
Query.do_something(params)

#Change to
Query.send_later(:do_something, params)

Мы постоянно используем его на работе, и он прекрасно работает.

...