ruby-on-railsrubyem-websocket

WebSocket in initializers, doesn't start in detached mode


My webapp consits of a HTTP server and a WebSocket server, both running on Rails. For Websockets I am using em-websocket which I start in the initializers, like this:

Thread.new do
  EventMachine.run do
    EventMachine::WebSocket.run(EVENTCHAT_CONFIG) do |socket|
        [...]
    end
  end
end if Rails.const_defined?(:Server)

This works fine when I start the server with 'rails s', but it doesn't work in detached mode ('rails s -d'). When I try to connect to the Websocket server via JS it tells me, that it is still in connecting state, so I guess something is blocking it. I also think this might be related to the threading.

I also tried starting the server with thin and unicorn, but both fail to start the Websocket Server.

Am I going against the convention here?


Solution

  • I just made the switch to foreman, which enables me to start multiple ruby processes with one command. You just have to add a Procfile. For deployments you can export this to various init systems, like in my case upstart.

    It doesn't work for me yet, though I do think this is the way to go.