Using a worker for a different purpose

Eric Wong normalperson at yhbt.net
Thu Jan 7 15:26:32 EST 2010


Iñaki Baz Castillo <ibc at aliax.net> wrote:
> Hi, I'm thinking in using a worker (i.e: "worker.nr == 0") to accomplish a 
> diferent task than binding in the Unicorn socket.
> 
> It would behave as a different process which binds in a different socket as 
> daemon, so the other workers would notify it after processing data.
> 
> Of course I could have a separate process but why not using an Unicorn worker 
> for this? in this way it's automatically reaped by master process if it 
> crashes and I don't need to manage two different services.
> 
> Is is suitable? The main question is: how to tell a worker not to bind in the 
> Unicorn configured socket(s)? is it possible?

Hi Iñaki,

You could _try_ something like:

  after_fork do |server, worker|
    if worker.nr == 0
      # new app
      server.app = Rack::Builder.new { ... }

      # clear the local listener set
      server.listeners = []

      # new listeners
      server.listen another_socket, socket_options
    end
  end

I make no guarantees that it'll work, though, and I'm hesitant
to support/encourage it even if it does.

-- 
Eric Wong


More information about the mongrel-unicorn mailing list