У меня проблема, аналогичная в этом другом сообщении , и я пробовал данные решения, но безрезультатно.
Мой проект - это Ruby-бот, который использует библиотеку Blather для подключения к серверу Jabber. Проблема в том, что когда возникает проблема с сервером и Blather генерирует исключение, вся программа закрывается, и у меня нет возможности поймать исключение.
Вот простой код, показывающий проблему. На локальном хосте нет Jabber-сервера, поэтому клиент Blather выдает исключение. У меня создалось впечатление, что EM.error_handler {} сможет его перехватить, но я никогда не вижу сообщения **** ERROR
, и программа просто останавливается. : (
#!/usr/bin/env ruby
require 'rubygems'
require 'blather/client/client'
EM.run do
EM.error_handler { puts " **** ERROR " }
Blather::Stream::Client.start(
Class.new {
}.new, 'echo@127.0.0.1', 'echo')
end
Я думаю, проблема в том, что Блатер также использует EventMachine и, возможно, вызывает EM.stop, что приводит к остановке внешнего экземпляра EM.