Tengo un problema similar al this other post y he intentado las soluciones dadas, pero fue en vano.¿Cómo se detectan las excepciones en una implementación de EventMachine?
Mi proyecto es un bot de Ruby que usa la biblioteca Blather para conectarse a un servidor Jabber. El problema es que cuando hay un problema con el servidor y Blather genera una excepción, todo el programa sale y no tengo oportunidad de detectar la excepción.
Aquí hay un código simple que muestra el problema. No hay un servidor Jabber ejecutándose en el host local, por lo que el cliente Blather arroja una excepción. Tenía la impresión de que EM.error_handler {} podría interceptarlo, pero nunca veo el mensaje **** ERROR
y el programa simplemente se detiene. :(
#!/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, '[email protected]', 'echo')
end
Creo que el problema es que también utiliza blather EventMachine y tal vez está llamando EM.stop, lo que hace que la instancia EM externa para detener.
Hmmm ... esta es una solución menos que óptima. 'error_handler' * debería * capturar estas cosas pero no es por alguna razón. Le daré una opción al parche de mono y veré si puedo "resolver" mi problema de esa manera. :/ –
El parche de mono es solo para ver si se están llamando a esos métodos, ya que después de eso ya no son necesarios. – tadman