ferret_daemon
2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# Ferret Win32 Service Daemon, called by Win 32 service,
# created by Herryanto Siatono <herryanto@pluitsolutions.com>
#
# see doc/README.win32 for usage instructions
#
require 'optparse'
require 'win32/service'
include Win32
# Read options
options = {}
ARGV.options do |opts|
opts.banner = 'Usage: ferret_daemon [options]'
opts.on("-l", "--log FILE", "Daemon log file") {|file| options[:log] = file }
opts.on("-c","--console","Run Ferret server on console.") {options[:console] = true}
opts.on_tail("-h","--help", "Show this help message") {puts opts; exit}
opts.on("-e", "--environment ENV ", "Rails environment") {|env|
options[:environment] = env
ENV['RAILS_ENV'] = env
}
opts.parse!
end
require File.dirname(__FILE__) + '/../config/environment'
# Ferret Win32 Service Daemon, called by Win 32 service,
# to run on the console, use -c or --console option.
module Ferret
class FerretDaemon < Daemon
# Standard logger to redirect STDOUT and STDERR to a log file
class FerretStandardLogger
def initialize(logger)
@logger = logger
end
def write(s)
@logger.info s
end
end
def initialize(options={})
@options = options
# initialize logger
if options[:log]
@logger = Logger.new @options[:log]
else
@logger = Logger.new RAILS_ROOT + "/log/ferret_service_#{RAILS_ENV}.log"
end
# redirect stout and stderr to Ferret logger if running as windows service
$stdout = $stderr = FerretStandardLogger.new(@logger) unless @options[:console]
log "Initializing FerretDaemon..."
if @options[:console]
self.service_init
self.service_main
end
end
def service_main
log "Service main enterred..."
while running?
log "Listening..."
sleep
end
log "Service main exit..."
end
def service_init
log "Starting Ferret DRb server..."
ActsAsFerret::Remote::Server.start
log "FerretDaemon started."
end
def service_stop
log "Stopping service..."
DRb.stop_service
log "FerretDaemon stopped."
end
def log(msg)
@logger.info msg
puts msg if @options[:console]
end
end
end
if __FILE__ == $0
d = Ferret::FerretDaemon.new(options)
d.mainloop
end