delayed_job, демоны или другие гемы для повторяющихся фоновых заданий - PullRequest
3 голосов
/ 07 июня 2011

Мне нужно создать фоновую работу, которая просматривает список RSS-каналов и анализирует их, скажем, каждые 10 минут.

Я использовал delayed_job для обработки фоновых заданий, и мне это очень понравилось. Хотя я верю, что он не создан для повторяющихся фоновых заданий. Я думаю, что я могу автоматически планировать фоновую работу в конце каждого (возможно, с begin..rescue только для того, чтобы убедиться, что он выполняется). Или заранее укажите, что за месяц вперед стоит работа, и назначьте другую, которая перенесет каждый месяц .. и т. Д.

Это вызвало у меня некоторое беспокойство, когда я начал спрашивать себя: что, если сервер выйдет из строя в середине выполнения, а задания не будут запланированы?

Я также посмотрел на гемы Daemons, которые выглядели так, как будто они запускают простые сценарии Ruby с командами start / stop. Мне нравится, как delayed_job планирует и обрабатывает повторы.

Что вы рекомендуете использовать в этом случае? Как вы думаете, как лучше спроектировать такую ​​систему с повторяющимися фоновыми заданиями? Кроме того, знаете ли вы, как я могу контролировать этот фоновый процесс и получать уведомления, если он останавливается?

Ответы [ 3 ]

2 голосов
/ 07 июня 2011

Я только что реализовал delayed_job для аналогичной задачи (используя :run_at => 2.days.from_now) и обнаружил, что она идеально подходит. Самый простой способ справиться с вашей озабоченностью по поводу сбоя процесса - это сделать первый шаг работы, чтобы создать следующую работу. Кроме того, вы можете создать отношение has_many к модели delayed_job, которое позволит вам получить доступ к :last_error. Или посмотрите в разделе «Крючки» readme , и он имеет прекрасный пример для отказа.

1 голос
/ 07 июня 2011

Я думаю, что это был похожий вопрос: Работа cron для рельсов: лучшие практики? - есть не только ответы, но и ссылки на Railscasts о фоновых заданиях в рельсах.

Я использовал cron + delayed_job, но запланированные задания должны были запускаться несколько раз в день, в основном только один раз.

0 голосов
/ 07 июня 2011

Посмотрите на SimpleWorker. Это упругая рабочая очередь планирования и фоновой обработки. Он основан на облаке, имеет постоянство и избыточность, поэтому вам не нужно беспокоиться, если ваши серверы выйдут из строя или перезапустятся.

Очень гибкий с точки зрения планирования, обеспечивает большой самоанализ заданий в очереди, а также уведомления о состоянии и ошибках.

Полное раскрытие: я работаю в SimpleWorker.

...