Долгосрочные задачи в Rails
У меня есть контроллер, который генерирует отчеты HTML, XML и CSV. Запросы, используемые для этих отчетов, занимают более минуты, чтобы вернуть их результат.
Каков наилучший подход для выполнения этих задач в фоновом режиме, а затем вернуть результат пользователю? Я посмотрел в Backgroundrb. Есть ли что-нибудь более базовое для моих нужд?
1 ответ
Вы можете посмотреть на использование DelayedJob для выполнения этих запросов и получить дополнительную таблицу с именем "NotificationQueue". Когда задание будет завершено (с его набором результатов), сохраните набор результатов и идентификатор пользователя, который сделал этот запрос в таблице NotificationQueue. затем при каждой загрузке страницы (и, если хотите, каждые 15-20 секунд), опросите эту базу данных и посмотрите, есть ли завершенные запросы.
DelayedJob действительно хорош, потому что вы пишете свой код, как будто это не будет отложенной работой, и просто измените код, чтобы сделать следующее:
#Your method
Query.do_something(params)
#Change to
Query.send_later(:do_something, params)
Мы используем его все время на работе, и он прекрасно работает.