Что вызывает EventMachine::ConnectionNotBound?
-
13-09-2019 - |
Вопрос
Я новичок в EventMachine, поэтому я не уверен, что это значит.Я получаю это исключение:
EventMachine::ConnectionNotBound recieved ConnectionUnbound for an unknown signature: ef93a97d4d6441cb80d30fe2313d7de73
Программа довольно сложная, поэтому я не могу толком объяснить все, что могло к этому привести.Все, что мне нужно, - это указатель на то, что искать.Ошибка, похоже, не задокументирована (глядя на http://eventmachine.rubyforge.org/).
Решение
У меня возникло это исключение, когда какое-то другое необработанное исключение было вызвано в методе initialize подкласса EventMachine::Connection .Убедитесь, что arity вашего метода инициализации подкласса является правильным и что метод инициализации выполняется без ошибок.
Другие советы
Обычно эти ошибки возникают при инициализации или post_init .Первое, что вам следует сделать, это добавить rescue в ваши обратные вызовы, чтобы выяснить, что на самом деле вызывает эту ошибку.
def initialize(*args)
...
super
rescue Exception
...
end
def post_init
...
super
rescue Exception
...
end
Я исправил пузырящееся исключение для этого случая в EventMachine более года назад.Это в драгоценном камне предварительного выпуска 1.0 (gem install eventmachine --pre
) или, что еще лучше, используйте EventMachine из репозитория.
Я столкнулся с аналогичной проблемой и во время расследования наткнулся https://github.com/igrigorik/em-http-request/issues/190#issuecomment-16995528
Вам в основном нужно обернуть EM::HttpRequest.new
с EM.schedule
или EM.next_tick
если вы делаете EM::HttpRequest.new
в вашем коде, даже несмотря на то, что он находится под EM.defer