我有一个运行在Apache+Passenger下的Rails应用程序,并使用backgroundrb完成一些任务。有没有办法让backgroundrb在乘客启动时启动?例如,在服务器重新启动后,我希望所有东西都可以重新启动,而无需手动干预来启动后台For,也不必为其创建一个init脚本。
发布于 2012-03-02 03:51:18
您可以在Rails初始化器(config/initializers)中进行调用。
要仅在启动乘客作业时执行此操作,请将呼叫包装在类似于...
if defined? PhusionPassenger
PhusionPassenger.on_event :starting_worker_process do |forked|
if forked
... spawn your backgroundrb here...
end
end
end这种方法的问题是,您最终会在每个乘客工作进程中产生一个新进程。你需要检查一下backgroundrb是否已经在运行。
你应该能够做一些类似的事情。
发布于 2012-05-10 05:26:27
您可以考虑将其放入您的config/environment.rb .rb文件中:
unless FileTest.exist?("#{RAILS_ROOT}/log/backgroundrb.pid")
fork do
exec("#{RAILS_ROOT}/script/backgroundrb", "run")
end
end将/log/ backgroundrb drb.pid更改为您的backgroundrb服务器使用的任何pidfile,您就可以开始比赛了……
https://stackoverflow.com/questions/9522157
复制相似问题