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

On 12/13/06, Ashley M. [email protected] 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.

	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, Gregory B. [email protected] wrote:

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.

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 13 Dec 2006, at 14:46, Gregory B. 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.

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

Ashley

On 12/13/06, Ashley M. [email protected] wrote:

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

Great to hear. Best of luck!
-greg