mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
58 lines
1.5 KiB
Text
58 lines
1.5 KiB
Text
|
#!/usr/bin/ruby
|
||
|
|
||
|
# This is an experimental feature for getting high-speed CGI by using a long-running, DRb-backed server in the background
|
||
|
|
||
|
require File.join(File.dirname(__FILE__), 'drb')
|
||
|
require 'cgi'
|
||
|
|
||
|
VERBOSE = false
|
||
|
|
||
|
AppName = File.split(File.expand_path(File.join(__FILE__, '..'))).last
|
||
|
SocketPath = File.expand_path(File.join(File.dirname(__FILE__), '../log/drb_gateway.sock'))
|
||
|
ConnectionUri = "drbunix:#{SocketPath}"
|
||
|
attempted_start = false
|
||
|
|
||
|
def start_tracker
|
||
|
tracker_path = File.join(File.dirname(__FILE__), '../script/tracker')
|
||
|
fork do
|
||
|
Process.setsid
|
||
|
STDIN.reopen "/dev/null"
|
||
|
STDOUT.reopen "/dev/null", "a"
|
||
|
|
||
|
exec 'ruby', tracker_path, 'start', ConnectionUri
|
||
|
end
|
||
|
|
||
|
$stderr.puts "dispatch: waiting for tracker to start..." if VERBOSE
|
||
|
10.times do
|
||
|
sleep 0.5
|
||
|
return if File.exists? SocketPath
|
||
|
end
|
||
|
|
||
|
$stderr.puts "Can't start tracker!!! Dropping request!"
|
||
|
Kernel.exit 1
|
||
|
end
|
||
|
|
||
|
unless File.exists?(SocketPath)
|
||
|
$stderr.puts "tracker not running: starting it..." if VERBOSE
|
||
|
start_tracker
|
||
|
end
|
||
|
|
||
|
$stderr.puts "dispatch: attempting to contact tracker..." if VERBOSE
|
||
|
tracker = DRbObject.new_with_uri(ConnectionUri)
|
||
|
tracker.ping # Test connection
|
||
|
|
||
|
$stdout.extend DRbUndumped
|
||
|
$stdin.extend DRbUndumped
|
||
|
|
||
|
DRb.start_service "drbunix:", $stdin
|
||
|
$stderr.puts "dispatch: publishing stdin..." if VERBOSE
|
||
|
|
||
|
$stderr.puts "dispatch: sending request to tracker" if VERBOSE
|
||
|
puts tracker.process($stdin)
|
||
|
|
||
|
$stdout.flush
|
||
|
[$stdin, $stdout].each {|io| io.close}
|
||
|
$stderr.puts "dispatch: finished..." if VERBOSE
|
||
|
|
||
|
|