バックグラウンドでジョブを実行するには、delayed_job (またはその他のバックグラウンド ジョブ プロセッサ) を使用する必要がありますが、サーバーのブート スクリプト/ブート レベルを変更することはできません。これは、プロバイダーがサーバーを再起動した場合、デーモンが利用可能であることが保証されないことを意味します (デーモンは、デプロイメントごとに 1 回だけ実行される 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