Ruby Eventmachine Erro: 'Sem Breaker de Loop'
-
26-09-2019 - |
Pergunta
Recebo um erro levemente elevado da EventMachine (0,12.10, no OSX 10.6.4):
terminate called after throwing an instance of 'std::runtime_error'
what(): no loop breaker
Isso ocorre apenas nos testes e somente quando todos os testes são executados juntos. Corra individualmente, eles passam.
Vi o único lugar no código EventMachine que menciona a mensagem do erro:
http://github.com/eventmachine/eventmachine/blob/master/ext/em.cppp#l333
(O que me intriga também é que parece um caminho de código Win32, ou estou errado?)
Para mim, parece que um pouco de soquetes é usado. Isso explicaria o padrão de ocorrência.
Solução
Ok, eu mesmo encontrei.
O erro vem de fato do código compilado condicionalmente Win32. Eu recebo um erro antigo de "muitos arquivos abertos", se eu construir localmente, e esse problema é fácil de relembrar, aumentando o valor ulimit para arquivos abertos (que se diz ser bastante modesto por padrão no OSX).
ulimit -n 1024 # or whichever value you find appropriate
(O padrão é 255, observe a saída de ulimit -a
)
Se eu construir e instalar a partir do repositório Git clonado usando rake gem:install
, Recebo a mensagem de erro esperada (UNIX). Portanto, o bug parece ser corrigido no mestre.
Bug arquivado para o rubygems.org gem está aqui: http://github.com/eventmachine/eventmachine/issues#issue/88