2012-03-01 11 views
0

Apache + Passengerの下でRailsアプリケーションを実行していて、いくつかのタスクでbackgroundrbを使用しています。旅客の出発時にbackgroundrbを開始する方法はありますか?たとえば、サーバーを再起動した後、手動で介入することなく、backgroundrbを起動したり、initスクリプトを作成したりすることなく、すべてを再開したいと思います。旅客の出発時にbackgroundrbを開始するには?

答えて

1

あなたはRails初期化子(config/initializers)で呼び出しを行うことができます。

、旅客ジョブが起動された場合にのみ、そう何かのように呼び出しをラップ...

if defined? PhusionPassenger 
    PhusionPassenger.on_event :starting_worker_process do |forked| 
    if forked 
     ... spawn your backgroundrb here... 
    end 
    end 
end 

するには、このアプローチの問題は、あなたがすべての乗客に新しいプロセスを生成終わるだろうということですワーカープロセス。 backgroundrbが既に実行されているかどうかをチェックする必要があります。

ShogunPandaのコメントhereを見て、Rufus SchedulerとPIDファイルでどのように動作するかを見てください。似たようなことができるはずです。変更は、あなたのbackgroundrbサーバが使用すると、あなたがレースを切るべきであるものは何でもpidファイルに/log/backgroundrb.pid ...

unless FileTest.exist?("#{RAILS_ROOT}/log/backgroundrb.pid") 
    fork do 
    exec("#{RAILS_ROOT}/script/backgroundrb", "run") 
    end 
end 

:あなたのconfig/environment.rbにファイルにこれを入れて検討することもでき

+0

イベント名は ":starting_worker_process"で、 ":start_worker_process"ではありません – ZX12R

+0

@ ZX12Rコメントごとの固定コード –

関連する問題