ruby - 如何捕获 EventMachine 服务器上的顶级故障?

标签 ruby logging exception-handling eventmachine

我有一个使用 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/

相关文章:

java - Netty 异常处理 - Handler throws Exception,然后呢?

ruby-on-rails - 基于正则表达式的 Rails 自定义验证?

ruby-on-rails - #<SimpleForm::FormBuilder> 的未定义方法 'link_to_add\remove'

ruby-on-rails - Hanami 有 .present 的替代品吗?

java - (Java) 将事件写入日志文本文件

c# - 如何记录所有抛出的异常?

ruby-on-rails - Rails 时间在控制台 session 过程中不会改变

c# - 高效地写入日志文件

c++ - Boost日志不写入文件,怎么办?

php - : Is this a good practice?异常(exception)