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