0

eventmachine (0.12.10、OSX 10.6.4) からわずかに heisen エラーが発生します。

terminate called after throwing an instance of 'std::runtime_error'
  what():  no loop breaker

テストでのみ発生し、すべてのテストが一緒に実行された場合にのみ発生します。彼らが通過する個別に実行します。

エラーのメッセージに言及している eventmachine コードの唯一の場所を見つけました。

http://github.com/eventmachine/eventmachine/blob/master/ext/em.cpp#L333

(私が困惑しているのは、それが win32 コード パスのように見えることです。それとも間違っているのでしょうか?)

私には、ソケットのようなリソースが使い果たされているように見えます。それは発生パターンを説明するでしょう。

4

1 に答える 1

2

わかりました、私はそれを自分で見つけました。

エラーは、実際には win32 条件付きでコンパイルされたコードから発生します。ローカルでビルドすると、昔ながらの「開いているファイルが多すぎます」というエラーが表示されます。その問題は、開いているファイルの ulimit 値を増やすことで簡単に解決できます (OSX では、デフォルトでかなり控えめであると言われています)。

ulimit -n 1024 # or whichever value you find appropriate

(デフォルトは 255 です。の出力を見てくださいulimit -a)

を使用して複製された git リポジトリからビルドおよびインストールするとrake gem:install、予想される (Unix) エラー メッセージが表示されます。そのため、バグはマスターで修正されたようです。

rubygems.org gem のバグはこちら: http://github.com/eventmachine/eventmachine/issues#issue/88

于 2010-09-30T14:11:28.240 に答える