如何在乘客启动时启动backgroundrb?

时间:2012-03-01 18:51:24

标签: ruby-on-rails passenger

我在Apache + Passenger下运行Rails应用程序,并使用backgroundrb执行某些任务。当乘客开始时,有没有办法让backgroundrb启动?例如,在服务器重新启动后,我希望所有内容都能重新启动,无需手动干预即可启动backgroundrb或必须为其创建init脚本。

2 个答案:

答案 0 :(得分:1)

您可以在Rails初始值设定项(config/initializers)中进行调用。

仅在启动Passenger作业时才这样做,将呼叫包裹在类似......

的内容中
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文件。你应该可以做类似的事情。

答案 1 :(得分: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更改为您的backgroundrb服务器使用的任何pid文件,您应该参加比赛......