我有一个使用 monit 监控的 EventMachine 服务器。有时它会崩溃,我试图找出原因,但我不清楚如何才能记录所有顶级故障。我试过这样的代码:
begin
EventMachine::run do
EventMachine::start_server('0.0.0.0', PORT, MyServer)
end
rescue Exception => e
puts "FAILURE: #{e.class}: #{e}"
end
但这似乎永远不会发现错误。我怀疑这可能是内存不足之类的问题,我正在单独跟踪,但我仍然希望该服务器尽可能记录其故障的近因。
最佳答案
如果您想要一个包罗万象的错误处理程序,请尝试 EM.error_handler。来自 docs 的示例:
EM.error_handler{ |e|
puts "Error raised during event loop: #{e.message}"
}
您可能还需要更细粒度的错误处理,在这种情况下您可以使用 errback 机制(参见 Deferrable)。所以例如你可以在你的 react 器循环中:
EventMachine::run do
server = EventMachine::start_server('0.0.0.0', PORT, MyServer)
server.errback { # handle error thrown by server here }
end
为此,在您的 MyServer 中包含 Deferrable
,然后每当您想要引发错误时,调用 fail
。
关于ruby - 如何捕获 EventMachine 服务器上的顶级故障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7628232/