Rails 3.2 アプリを Thin サーバーで実行していて、application.rb で EventMachine を起動したい:
# application.rb
config.after_initialize do
  if ENV['EM']
    EM.run do
      host = '0.0.0.0'
      port = 3001
      # hit Ctrl + C to stop
      Signal.trap("INT")  { EventMachine.stop }
      Signal.trap("TERM") { EventMachine.stop }
      EventMachine::start_server host, port, SomeModule
      puts "EventMachine running on #{host}:#{port}. Ctrl + C to stop."
    end
  end
end
SomeModule には、ロードされている Rails に依存するコードがあります。そのため、これを初期化子ではなく after_initialize ブロックに入れました。
サーバーを(でrails s)起動すると、出力は正常に見えます:
=> Booting Thin
=> Rails 3.2.13 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
EventMachine running on 0.0.0.0:3001. Ctrl + C to stop.
しかし、ブラウザで localhost にアクセスすると、204 No Content応答が返されます。
これを引き起こすいくつかのことを考えることができますが、解決策ではありません:)
- Railsアプリをブロックしている同じスレッドでEventMachineを起動しているのかもしれません。しかし、シンはこれを正しく処理する必要がありますか?
 - サーバーを別の方法で起動する必要があるかもしれませんが、それではどうすればよいでしょうか?