How do I run WEBrick as a daemon?

Hi

I'm trying to make a simple web server to provide decryption to a C# app that can't access OpenSSL libraries. It has to run on a FreeBSD server so I need to make it run as a daemon, but I can't work out how.

The skeleton of the code is below. I've noticed there is a WEBrick::Daemon class but I can't figure out how to use it. I've tried using script/server from Rails as a template but it's pretty complex. Can anyone offer some hints?

Thanks in advance
Ashley

#!/usr/bin/env ruby

class PasswordServer
   include WEBrick

   def initialize(port)
     decrypter_proc = lambda { |request, response|
       # blah
     }

     decrypt = HTTPServlet::ProcHandler.new(decrypter_proc)

     @server = HTTPServer.new(:Port => port)
     @server.mount("/decrypt", decrypt)
   end

   def start
     trap("INT") { server.shutdown }
     trap("TERM") { server.shutdown }
     server.start
   end
end

if $0 == __FILE__
   PasswordServer.new(2999).start
end

*blows dust off of gambit*

We just pass a become_daemon flag in our subclass of
Webrick::HTTPServer, and then use this to determine whether or not to
start the Daemon. There is some extra stuff in there, but I figured
it'd be useful to see it in context.

    def initialize( game_class,
                  port = 80, html_dir = "html", become_daemon = false )
      super(:Port => port)
      
      @html_dir = File.join(File.expand_path(File.dirname($0)), html_dir)
      self.class.const_set(:SERVER, self)
      @server_message = nil

      @game_class = game_class
      @games = Hash.new
      @players = Hash.new
      
      WEBrick::Daemon.start if become_daemon
      
      mount_proc("/") { |req, resp| serve_file(req, resp, req.path) }
      mount_proc("/view") { |req, resp| serve_view(req, resp) }
      mount_proc("/event") { |req, resp| serve_event(req, resp) }
      mount_proc("/server") { |req, resp| serve_server_event(req, resp) }

      ['INT', 'TERM'].each { |signal| trap(signal) { shutdown } }
    end

···

On 12/13/06, Ashley Moran <work@ashleymoran.me.uk> wrote:

The skeleton of the code is below. I've noticed there is a
WEBrick::Daemon class but I can't figure out how to use it. I've
tried using script/server from Rails as a template but it's pretty
complex. Can anyone offer some hints?

Here is the whole server, btw. http://tinyurl.com/yjet4l

Note, bug JEG2 if you have questions, aside from light debugging, I've
only worked with the gambit server externally.

···

On 12/13/06, Gregory Brown <gregory.t.brown@gmail.com> wrote:

On 12/13/06, Ashley Moran <work@ashleymoran.me.uk> wrote:

> The skeleton of the code is below. I've noticed there is a
> WEBrick::Daemon class but I can't figure out how to use it. I've
> tried using script/server from Rails as a template but it's pretty
> complex. Can anyone offer some hints?

*blows dust off of gambit*

We just pass a become_daemon flag in our subclass of
Webrick::HTTPServer, and then use this to determine whether or not to
start the Daemon. There is some extra stuff in there, but I figured
it'd be useful to see it in context.

Cheers! I've extracted the important bits out of your code and it's working fine. Thanks for replying so quick.

Ashley

···

On 13 Dec 2006, at 14:46, Gregory Brown wrote:

Here is the whole server, btw. http://tinyurl.com/yjet4l

Note, bug JEG2 if you have questions, aside from light debugging, I've
only worked with the gambit server externally.

Great to hear. Best of luck!
-greg

···

On 12/13/06, Ashley Moran <work@ashleymoran.me.uk> wrote:

Cheers! I've extracted the important bits out of your code and it's
working fine. Thanks for replying so quick.