1

追加の初期化なしでThin内でEventMachine呼び出しを使用することは可能ですか?

現在、Thin(サービスとして実行されている)によって実行されているSinatraアプリがあります。を使おうとするとEventMachine.connect_unix_domaineventmachine not initializedThin(およびおそらくEventMachine)が実行されていても...が表示されます。

class App < Sinatra::Base
  $sock = EventMachine.connect_unix_domain("/tmp/appsock.sock")
  # import all routes
  Dir.glob("controllers/*.rb").each { |r| require_relative r }
end
4

1 に答える 1

4

私の推測では (申し訳ありませんが、このボックスには em がインストールされていません)、問題は、クラスがロードされるときにコードが評価されるためです。その時点で、おそらくシンはセットアップされておらず、EM はおそらく初期化されていません。

$sock = ... 呼び出しを EM.next_tick {} でラップしてみると、EM が実際に開始されるまで実行を遅らせることができます。

メモリが機能する場合、EM が実際に初期化される前に next_tick に何かを追加できると思います。

于 2011-08-23T04:40:49.753 に答える