Мы должны использовать delayed_job (или какой-либо другой процессор фоновых заданий) для выполнения заданий в фоновом режиме, но нам не разрешено изменять сценарии загрузки / уровни загрузки на сервере. Это означает, что не гарантируется, что демон останется доступным, если провайдер перезапустит сервер (поскольку демон был бы запущен по рецепту capistrano, который запускается только один раз за развертывание).
В настоящее время лучший способ, который я могу придумать для обеспечения того, чтобы демон delayed_job всегда работал, - это добавить в наше приложение Rails инициализатор, который проверяет, запущен ли демон. Если он не запущен, инициализатор запускает демон, в противном случае он просто оставляет его.
Таким образом, возникает вопрос, как определить, что демон Delayed_Job работает изнутри сценария? (Мы должны иметь возможность запускать демон довольно легко, но я не знаю, как определить, активен ли он уже).
У кого-нибудь есть идеи?
С уважением, Берни
Основываясь на ответе ниже, я пришел к следующему. Просто поместите его в 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
-e production
? - person nathanvda   schedule 14.09.2010script/delayed_job
наbin/delayed_job
внутри методаstart_delayed_job
- person Brian Hellekin   schedule 24.07.2018