Пассажир убивает работу с присоской? или тупик?
Хотите знать, если кто-нибудь видел эту проблему. Я использую Rails 3.2 на Passenger 3 с версией 1.1 sucker_punch gem
У меня длительное задание sucker_punch (занимает около 10 часов), это ночная партия. Я работаю на Phusion Passenger с (думаю, 3 рабочих потока)
status from passenger-status
----------- General information -----------
max = 3
count = 0
active = 0
inactive = 0
Waiting on global queue: 0
Мое задание sucker_punch выполняется асинхронно, как часть задания оно выполняет другие асинхронные меньшие задания sucker_punch (каждое занимает около 30 секунд)
Я не могу точно определить, что происходит, но "иногда" моя продолжительная работа просто умирает или кажется останавливается. Я добавил некоторый код отладки вокруг всей работы sucker_punch
begin
rescue Exception => e
logger.error(e)
raise e
end
Однако не видел исключения, так что, если предположить, что мой продолжительный запуск sucker_punch остановлен, а не убит? Или потенциальный тупик?
Интересная часть этого. Иногда моя долгая работа работает нормально, а иногда нет.
1 ответ
Это правильно. В настоящее время Passenger предполагает, что ваши процессы обрабатывают только веб-запросы, а не фоновые задачи. Из-за этого Пассажир применяет определенные ограничения, чтобы держать под контролем ошибочные приложения. Одним из таких ограничений является то, что если процесс получает команду на останов, он должен сделать это в течение 1 минуты; если это не так, Пассажир заставит его отключиться. К сожалению, это по своей сути несовместимо с понятием запуска фоновых задач внутри процессов приложения.
В настоящее время для этого существует проблема: https://github.com/phusion/passenger/issues/1211
Возможно, мы будем работать над этим в будущем, но пока это не считается приоритетным вопросом. Я рекомендую вам использовать внешнюю фоновую рабочую систему, такую как Sidekiq.