Лучший текущий метод обработки фоновых задач?
Я пытаюсь найти лучший способ запуска сценариев в фоновом режиме. Я искал вокруг и нашел множество вариантов, но многие/большинство из них, похоже, стали неактивными в последние несколько лет. Позвольте мне описать мои потребности.
Приложение rails в основном является интерфейсом для настройки того, когда и как будут выполняться эти сценарии. Скрипты запускают и генерируют отчеты и отправляют оповещения по электронной почте. Таким образом, пользователь должен иметь возможность настроить время начала и частоту выполнения этих сценариев динамически. Сами скрипты должны иметь доступ к среде рельсов, чтобы сохранить результирующие отчеты в БД.
Просто пытаюсь найти лучший метод из множества параметров.
Ответы
Ответ 1
Я думаю, что вы ищете систему очередей заданий.
Для этого вы или ищете resque или delayed_job. Обе программы поддержки планируют в какой-то момент в будущем - delayed_job делает это изначально, тогда как resque имеет плагин для него resque_scheduler.
Вы помещаете задания в фоновом режиме с параметрами, которые вы указали, а затем в выбранное вами время они будут выполнены. Вы можете установить задание на повторное или неограниченное число раз (по крайней мере, с помощью реск-планировщика, не уверен в задержке_job).
delayed_job проще настроить, так как он сохраняет все в базе данных. resque более надежный, но требует, чтобы у вас был redis в вашем стеке, но если вы уже делаете это в значительной степени идеальным решением для своей проблемы.
Ответ 2
Недавно я узнал о Sidekiq, и я думаю, что это действительно здорово.
Там также RailsCast об этом - Sidekiq.
Ответ 3
Взгляните на драгоценный камень, когда на https://github.com/javan/whenever.
Он позволяет планировать задачи, такие как задания cron.
Хорошо работает под linux, а последний коммит был 14 дней назад. Мой друг использовал его в проекте и был очень доволен им.
edit: посмотрите на драгоценный камень delayed_job, он хорош для выполнения длинных задач в фоновом режиме. Полезно при создании задания cron только для запуска других задач.