Mam podobny problem do this other post i próbowałem podanych rozwiązań, ale na próżno.Jak wychwytujesz wyjątki w implementacji EventMachine?
Mój projekt to bot Ruby, który używa biblioteki Blather do łączenia się z serwerem Jabber. Problem polega na tym, że gdy występuje problem z serwerem i Blather generuje wyjątek, cały program kończy działanie i nie mam możliwości złapania wyjątku.
Oto prosty kod, który pokazuje problem. Nie ma serwera Jabber uruchomionego na localhost, więc klient Blather zgłasza wyjątek. Miałem wrażenie, że EM.error_handler {} będzie w stanie go przechwycić, ale nigdy nie widzę komunikatu **** ERROR
i program się zatrzymuje. :(
#!/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
Myślę, że problemem jest to, że blather wykorzystuje również EventMachine a może dzwoni EM.stop, który powoduje, że zewnętrzna instancja EM przestać.
Hmmm ... to mniej niż optymalne rozwiązanie. 'error_handler' * powinno * łapać te rzeczy, ale nie z jakiegoś powodu. Podam opcję poprawki małpy i zobaczę, czy mogę "rozwiązać" mój problem w ten sposób. :/ –
Poprawka małpy służy tylko do sprawdzenia, czy te metody są wywoływane, ponieważ po tym czasie nie są już wymagane. – tadman