2012-03-01 61 views
0

我有一個Rails應用程序在Apache + Passenger下運行,並使用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文件。你應該可以做類似的事情。

+0

事件名稱爲「:starts_worker_process」而非「:start_worker_process」 – ZX12R 2012-06-20 08:05:45

+0

每個@ ZX12R註釋的固定代碼 – 2012-07-02 17:54:56

0

你可以考慮把這個在你的config/environment.rb文件中:

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

變化/log/backgroundrb.pid到任何你了pidfile服務器backgroundrb使用,你應該去比賽......