2016-09-05 2 views
0

Я запускаю веб-приложение Rails под Phusion Passenger (версия 5.0.7). Некоторые HTTP-запросы запускают рабочие процессы, которые выполняются в качестве фоновых заданий в пуле потоков (с использованием флагов Concurrent Ruby). Учитывая, что Phusion Passenger является сервером forking, я теперь понимаю, что нет гарантии, что рабочий процесс не будет завершен, если не будут обслуживаться ожидающие запросы. Это может просто прервать любую фоновую обработку, которая может быть запущена в некотором пуле потоков в этом процессе.Рельсы: использование потоков Ruby для запуска фоновых заданий в приложениях Rails 4

Есть ли способ сделать эту работу на Phusion Passenger? В качестве альтернативы, будет ли Puma лучшим выбором для такого использования?

+0

Почему бы не использовать отдельный процесс для фона? –

+0

Не могли бы вы добавить ответ о том, как это сделать? Причина, по которой я задал этот вопрос. Я не заинтересован в Delayed Jobs, Sidekiq и т. Д., Потому что у меня уже есть рабочий код, который хорошо работает с рабочими процессами. – CppNoob

+0

Ваш код также обрабатывает перезагрузку сервера (это лишает работу)? –

ответ

0

Вам не нужен HTTP-сервер для запуска фонового задания. Проверьте Rails ActiveJob средства для управления очередью заданий и их обработки.

+0

Могу ли я использовать пользовательскую реализацию вместо Sidekiq, Resque и т. Д.? У меня есть большое количество проверенного кода, который в настоящее время обрабатывает фоновый процесс. – CppNoob

+0

Ну, конечно, вы могли бы реализовать API, изменив одну из существующих бэкэнд-реализаций (например, https://github.com/collectiveidea/delayed_job). Вы также можете просто запустить рельсы для своего кода на консоли с помощью http://guides.rubyonrails.org/command_line.html#rails-runner –

Смежные вопросы