How do I run WEBrick as a daemon?

A

Ashley Moran

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
 
G

Gregory Brown

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
 
G

Gregory Brown

*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.

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.
 
A

Ashley Moran

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,048
Latest member
verona

Latest Threads

Top