Долгосрочные задачи в 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)

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

Другие вопросы по тегам