ferret_start
1.78 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
#!/usr/bin/env ruby
# Ferret DRb server launcher script
#
# Place doc/ferret_server.yml into RAILS_ROOT/config and fit to taste. Start
# it with RAILS_ENV set to the desired environment.
#
#
# To run the demo project's unit tests against the drb server, start it with
#
# RAILS_ENV=test script/ferret_start
#
# and run your tests with the AAF_REMOTE environment variable set to a
# non-empty value:
#
# AAF_REMOTE=true rake
#
# The server writes a log file in log/ferret_server.log, it's
# STDOUT gets redirected to log/ferret_server.out
ENV['FERRET_USE_LOCAL_INDEX'] = 'true'
require File.dirname(__FILE__) + '/../config/boot'
require RAILS_ROOT + '/config/environment'
config = ActsAsFerret::Remote::Config.load
@pid_file = config['pid_file']
def write_pid_file
raise "No PID file defined" if @pid_file.blank?
open(@pid_file,"w") {|f| f.write(Process.pid) }
end
def safefork
tryagain = true
while tryagain
tryagain = false
begin
if pid = fork
return pid
end
rescue Errno::EWOULDBLOCK
sleep 5
tryagain = true
end
end
end
safefork and exit
at_exit do
File.unlink(@pid_file) if @pid_file && File.exists?(@pid_file) && File.read(@pid_file).to_i == Process.pid
end
print "Starting ferret DRb server..."
trap("TERM") { exit(0) }
sess_id = Process.setsid
begin
ActsAsFerret::Remote::Server.start
write_pid_file
puts "Done."
STDIN.reopen "/dev/null" # Free file descriptors and
STDOUT.reopen "#{RAILS_ROOT}/log/ferret_server.out", "a" # point them somewhere sensible
STDERR.reopen STDOUT # STDOUT/STDERR should go to a logfile
rescue
$stderr.puts "Error starting ferret DRb server: #{$!}"
$stderr.puts $!.backtrace
exit(1)
end
DRb.thread.join
# vim:set filetype=ruby: