我从eventmachine(0.12.10,在OSX 10.6.4上)得到了一个轻微的heisen错误:
terminate called after throwing an instance of 'std::runtime_error'
what(): no loop breaker
它只发生在测试中,并且只有在所有测试一起运行时才会发生。单独运行,他们通过。
我发现事件机器代码中唯一提到错误消息的地方:
http://github.com/eventmachine/eventmachine/blob/master/ext/em.cpp#L333
(令我困惑的是它看起来像win32代码路径,或者我错了?)
对我而言,看起来像套接字这样的一些资源已经用完了。这可以解释出现的模式。
答案 0 :(得分:2)
好的,我自己找到了。
错误实际上来自win32条件编译代码。如果我在本地构建,我会得到一个普通的“太多打开文件”错误,并且通过增加打开文件的ulimit值(在OSX上默认为非常适度)来轻松解决该问题。
ulimit -n 1024 # or whichever value you find appropriate
(默认值为255,查看ulimit -a
的输出)
如果我使用rake gem:install
从克隆的git存储库构建和安装,我会收到预期的(Unix)错误消息。所以这个bug似乎是在master中修复的。
rubygems.org gem的错误提示是:http://github.com/eventmachine/eventmachine/issues#issue/88