Heroku で Unicorn を使用しており、EventMachine ループを作成しました: ( https://gist.github.com/jonkgrimes/5103321から)
after_fork do |server,worker|
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
if defined?(EventMachine)
unless EventMachine.reactor_running? && EventMachine.reactor_thread.alive?
if EventMachine.reactor_running?
EventMachine.stop_event_loop
EventMachine.release_machine
EventMachine.instance_variable_set("@reactor_running",false)
end
Thread.new { EventMachine.run }
end
end
Signal.trap("INT") { EventMachine.stop }
Signal.trap("TERM") { EventMachine.stop }
end
EventMachine はうまく機能しますが、「eventmachine ループが実行されていない」ため、ある時点でイベントが失敗し始めます。考えられる問題は次の 2 つです。
- ループはまだ実行されていますが、どういうわけか私のユニコーンフォークは適切にバインドされていません (ありそうにない)
- ループがクラッシュしました(可能性が高いと思われます)
クラッシュした eventmachine を検出して再起動するにはどうすればよいですか? または、この問題をデバッグするにはどうすればよいですか?