2011-07-05 6 views
1

余分な初期化をせずにThin内でEventMachine呼び出しを使用できますか?Thin webappでEMコールを使用することはできますか?

現在、私は、サービスとして動作しているThinによって実行されているSinatraアプリを持っています。 EventMachine.connect_unix_domainを使用しようとすると、シン(おそらくEventMachine)が動作していても、私はeventmachine not initializedになります。

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

私の推測(このボックスにはインストールされていません)は、クラスがロードされたときにコードが評価されるためです。その時点で、thinはおそらく設定されておらず、EMはおそらく初期化されていません。

EMが実際に起動するまで、実行を遅らせるべきEM.next_tick {}で$ sock = ...呼び出しをラップすることができます。

EMが実際に初期化される前に、メモリが役立つ場合は、next_tickに追加することができます。

関連する問題