私たちはRailsとEventMachineを一緒に使用しています。そして、そのコンボをPassengerで使用する場合、非常に特別な設定が必要です。多くの試行錯誤の後、私はEventMachineの初期化をうまく行っていますが、コードを少し良く理解したいと思います。このコードスニペットの下でわかるように、イニシャライザはPassengerをチェックし、EventMachineを再起動する前にフォークされたプロセスかどうかを確認します。EventMachineスレッドとRubyスレッド - 実際に何が起こっていますか?
私の質問はEM.reactor_runningに関連していますか? EM.stopコマンドを使用します。 Passengerがプロセスをフォークした場合、新しいスレッドでEMリファレンスを再起動する必要があるのはなぜですか? EM.reactor_runningの場合?真を返します、私はどのEMインスタンスを参照していますか?
あなたがここに私たちのブログ上で完全な初期化コードを見ることができますhttp://www.hiringthing.com/2011/11/04/eventmachine-with-rails.html
すばらしい説明ありがとうございます。私は自分のスレッドでEMを実行する必要性についてはっきりしていますが、「EMループが残っているかもしれません」と言うと、私は少し不明です。 EMループはどのように「残っている」でしょうか?私は親プロセスのEMをシャットダウンするつもりはありませんか? – Joshua
これはまさにあなたがやっていることです。親プロセスから残っている可能性のあるEMをシャットダウンしています。 EMループが親プロセスで実行されると、それもforkされますが、通常、親から残されたファイル記述子にはまったく関心がありませんので、代わりにゼロから始めます。乗客がEMループを単独で走らせる可能性が低いことを考えると、これは何よりも安全対策のほうです。 – roidrage
同様の状況で、Ruby-amqp gemを使ってRabbitMQを使って作業しています。 Thinは独自のEventMachineループを持っています。私は現在、EventMachine.next_tickを使用して、私のamqpを処理しています。これは正しいのですか、EventMachine.fork_reactorを使用してAMQPにEMを使用する必要がありますか? – wchrisjohnson