Каков наилучший способ запуска асинхронных заданий в приложении Rails?

Я знаю, что есть несколько плагинов, которые выполняют асинхронную обработку. Какой из них лучший и почему?

Те, о которых я знаю:

8 ответов

Решение

Starling и Workling кажутся довольно интересными (см. скринкаст), если у вас может быть несколько таких процессов, и вы хотите поставить их в очередь.

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

Я добавлю DJ (Delayed Job) в список - http://blog.leetsoft.com/2008/2/17/delayed-job-dj

Ребята из github недавно дали ему отличный обзор: http://github.com/blog/197-the-new-queue

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

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

Я слышал очень хорошие вещи о фоновой работе Ара Т. Говарда (Bj), которая, по выражению README, является просто мертвой очередью с нулевым приоритетом администратора для Rails. Это гораздо более легкое решение, и в результате может быть предпочтительнее, чем BackgroundRb, для большинства сценариев.

Если все, что вам нужно, это решение для нечастой автономной пакетной обработки, тогда script/runner который поставляется со всеми приложениями Rails будет более чем адекватным.

Для дальнейшего чтения вы можете посмотреть http://wiki.rubyonrails.org/rails/pages/HowToRunBackgroundJobsInRails из Rails Wiki.

Resque может помочь вам тоже.

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

Ребята из Github создали и используют его.

Статья ниже может помочь вам начать:

http://rubylearning.com/blog/2010/11/08/do-you-know-resque/

BackgrounDRb - Плюсы: полнофункциональный, обмен сообщениями, Минусы: многопоточные (eek - Rails не безопасен для потоков!), Сложный

Генератор демонов - Плюсы: Простота, выполнение заданий и все! Минусы: Ничего особенного.

Плагин Starling + Workling очень прост. Кроме того, он использует Memcached, который прост, протестирован и масштабируем.

Мы используем Cron. Легко настроить, легко обслуживать, и это всегда работает.

BackgroundRb съест ваш мозг.

BackgrounDRb не является многопоточным, полностью основан на процессах. Он имеет функцию пулов потоков, которую пользователь может использовать, только если он хочет обрабатывать связанные с IO задачи одновременно.

Попробуйте выпуск 1.1 и сообщите мне (в моем блоге) или в списке рассылки о любых проблемах.

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