Мы должны использовать delayed_job (или некоторый другой процессор фоновых заданий) для выполнения заданий в фоновом режиме, но нам не разрешают изменить начальную загрузку scripts/boot-levels на сервере. Это означает, что демон, как гарантируют, не останется доступным, если поставщик перезапустит сервер (так как демон был бы запущен capistrano рецептом, который только выполняется однажды на развертывание).
В настоящее время лучший способ, которым я могу думать, чтобы гарантировать delayed_job демону, всегда работает, должен добавить инициализатор к нашему приложению направляющих, которое проверяет, работает ли демон. Если это не работает, то инициализатор запускает демона, иначе, это просто уезжает, это.
Вопрос, поэтому, состоит в том, как мы обнаруживаем, что демон Delayed_Job работает из сценария? (Мы должны смочь запустить демона довольно легко, бит, который я не знаю, как обнаружить, если Вы уже активны).
У кого-либо есть какие-либо идеи?
С уважением, Bernie
На основе ответа ниже, это - то, что я придумал. Просто поместите его в конфигурацию/инициализаторы, и Вы все установлены:
#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
Проверить наличие файла PID демонов ( File.exist? ...
). Если он там, то предположите, что он работает, иначе запустите его.