Каков наилучший способ запуска асинхронных заданий в приложении 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 создали и используют его.
Статья ниже может помочь вам начать:
BackgrounDRb - Плюсы: полнофункциональный, обмен сообщениями, Минусы: многопоточные (eek - Rails не безопасен для потоков!), Сложный
Генератор демонов - Плюсы: Простота, выполнение заданий и все! Минусы: Ничего особенного.
Плагин Starling + Workling очень прост. Кроме того, он использует Memcached, который прост, протестирован и масштабируем.
Мы используем Cron. Легко настроить, легко обслуживать, и это всегда работает.
BackgroundRb съест ваш мозг.
BackgrounDRb не является многопоточным, полностью основан на процессах. Он имеет функцию пулов потоков, которую пользователь может использовать, только если он хочет обрабатывать связанные с IO задачи одновременно.
Попробуйте выпуск 1.1 и сообщите мне (в моем блоге) или в списке рассылки о любых проблемах.