2012-03-01 35 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使用,你应该去比赛......