Нам нужно использовать delayed_job (или какой-либо другой процессор фонового задания) для запуска заданий в фоновом режиме, но нам не разрешено изменять сценарии загрузки/уровни загрузки на сервере. Это означает, что демон не гарантированно останется доступным, если поставщик перезапустит сервер (так как демон был запущен рецептом capistrano, который запускается только один раз для развертывания).
В настоящее время лучший способ, с помощью которого я могу думать о том, что daemon delayed_job всегда работает, заключается в добавлении инициализатора в наше приложение Rails, которое проверяет, работает ли демон. Если он не работает, инициализатор запускает демона, иначе он просто оставляет его.
Итак, возникает вопрос, как мы обнаруживаем, что демон Delayed_Job запущен изнутри script? (Мы должны иметь возможность запускать демона довольно легко, бит, я не знаю, как обнаружить, если он уже активен).
У кого-нибудь есть идеи?
С уважением, Bernie
Основываясь на ответе ниже, это то, с чем я столкнулся. Просто поставьте его в config/initializers, и все будет установлено:
#config/initializers/delayed_job.rb
DELAYED_JOB_PID_PATH = "#{Rails.root}/tmp/pids/delayed_job.pid"
def start_delayed_job
Thread.new do
`ruby script/delayed_job start`
end
end
def process_is_dead?
begin
pid = File.read(DELAYED_JOB_PID_PATH).strip
Process.kill(0, pid.to_i)
false
rescue
true
end
end
if !File.exist?(DELAYED_JOB_PID_PATH) && process_is_dead?
start_delayed_job
end