Каков наилучший способ запуска асинхронных заданий в приложении Rails?
Я знаю, что есть несколько плагинов, которые выполняют асинхронную обработку. Какой из них лучший и почему?
Я знаю, что:
Ответы
Ответ 1
скворцы и работающие выглядят довольно интересными (см. screencast), если у вас может быть несколько таких процессов, и вы хотите их поставить в очередь.
вам также может быть интересен предыдущий скринкаст, который использует рейк для фонового процесса, а также будущий, который, вероятно, будет о другом решении к тому же вопросу.
Ответ 2
Я добавлю DJ (Delayed Job) в список - http://blog.leetsoft.com/2008/2/17/delayed-job-dj
Недавно ребята github дали отличный обзор: http://github.com/blog/197-the-new-queue
Ответ 3
Является ли что-то "лучшим" решением, действительно зависит от проблемы, которую вы пытаетесь решить. В некоторых случаях лучшим решением будет самое легкое решение, в другом - в супертяжелом весе.
BackgroundRb, вероятно, является наиболее полнофункциональным процессором обработки заданий Rails, но он также самый сложный, поэтому требуют больше инвестиций, чтобы справиться с этим. BackgroundRb, вероятно, может обрабатывать большинство случаев использования, от простого до сложного.
Я слышал очень хорошие вещи об Ara T. Howard Фоновое задание (Bj), которое, цитируя README - это головоломка с нулевым приоритетом для обычного администратора для Rails. Это гораздо более легкое решение и может быть предпочтительным для BackgroundRb для большинства сценариев.
Если все, что вы хотите, является решением для нередкой автономной обработки в пакетном режиме, то script/runner
, который поставляется со всеми приложениями Rails, будет больше, чем адекватны.
Для дальнейшего чтения вы можете посмотреть HowToRunBackgroundJobsInRails из Rails Wiki.
Ответ 4
Resque также может помочь вам.
Это очень хороший инструмент для создания фоновых заданий, размещения этих заданий в нескольких очередях и последующей обработки.
Ребята из Github создали и использовали его.
Ниже приведена следующая статья:
http://rubylearning.com/blog/2010/11/08/do-you-know-resque/
Ответ 5
BackgrounDRb - Плюсы: Полнофункциональный, обмен сообщениями, Минусы: Резьбовое (eek - Rails не является потокобезопасным!), сложный
Daemon Generator - Плюсы: Простой, запускает задания, и вот оно!, Минусы: Ничего из этого причудливого обмена сообщениями.
Ответ 6
Плагин Starling + Workling прост. Кроме того, он использует Memcached, который прост, проверен и масштабируется.
Ответ 7
Мы используем Cron. Легко настраивается, прост в обслуживании и всегда работает.
BackgroundRb будет есть ваш мозг.
Ответ 8
BackgrounDRb не является потоковым, его полностью основан на процессе. Он имеет только функцию пулов потоков, которые пользователь может использовать, если он хочет одновременно обрабатывать связанные с IO задачи.
Попробуйте 1.1 релиз и позвольте мне (в моем блоге) или в списке рассылки узнать о любых проблемах.