我们一起使用Rails和EventMachine,当与Passenger一起使用时,有一些非常具体的设置需要完成.经过大量的试验和错误,我使EventMachine初始化运行良好,但我想更好地理解代码.正如您在下面的代码片段中所看到的,我们的初始化程序检查Passenger,然后在重新启动EventMachine之前检查它是否是分叉进程.
if defined?(PhusionPassenger)
PhusionPassenger.on_event(:starting_worker_process) do |forked|
# for passenger, we need to avoid orphaned threads
if forked && EM.reactor_running?
EM.stop
end
Thread.new {
EM.run do
Run Code Online (Sandbox Code Playgroud)
我的问题与EM.reactor_running有关?和EM.stop命令.如果Passenger已分叉我们的进程,为什么我需要在新线程中重新启动EM引用?如果EM.reactor_running?返回true,我引用的EM实例是什么?
您可以在我们的博客上查看完整的初始化代码http://www.hiringthing.com/2011/11/04/eventmachine-with-rails.html