def start
FCGI.each do |fcgi|
begin
res = WEBrick::FCGIResponse.new(@config)
req = WEBrick::FCGIRequest.new(@config)
res.status = 500
res.body = ''
if fcgi.env['PATH_INFO'].nil? or fcgi.env['PATH_INFO'].empty?
res.status = 301
res['location'] = (fcgi.env['REQUEST_URI'] || '') + '/'
else
req.parse(fcgi)
res.request_method = req.request_method
res.request_uri = req.request_uri
res.request_http_version = req.http_version
res.keep_alive = req.keep_alive?
if handler = @config[:RequestHandler]
handler.call(req, res)
end
service(req, res)
end
rescue HTTPStatus::EOFError, HTTPStatus::RequestTimeout => ex
res.set_error(ex)
rescue HTTPStatus::Error => ex
res.set_error(ex)
rescue HTTPStatus::Status => ex
res.status = ex.code
rescue Exception
@logger.warn "Whoops -- #{$!}: #{$!.backtrace[0]}"
res.body = "Whoops -- #{$!}: #{$!.backtrace.join("\n")}"
res.status = 500
res['content-type'] = 'text/plain'
end
res.send_response(fcgi.out)
yield fcgi, res if block_given?
fcgi.finish
end
end