aboutsummaryrefslogtreecommitdiffstats
path: root/railties/dispatches
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2005-03-21 17:46:31 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2005-03-21 17:46:31 +0000
commitc006bae4b8e0b44fccbd43e2982428aabdeb538e (patch)
tree58a78cf8a6d51ea71b02a47378daa71a6abf70b1 /railties/dispatches
parent32e0138b0ba9acb7405c915f600c789a8c61f44c (diff)
downloadrails-c006bae4b8e0b44fccbd43e2982428aabdeb538e.tar.gz
rails-c006bae4b8e0b44fccbd43e2982428aabdeb538e.tar.bz2
rails-c006bae4b8e0b44fccbd43e2982428aabdeb538e.zip
Added additional error handling to the FastCGI dispatcher to catch even errors taking down the entire process
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@969 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'railties/dispatches')
-rwxr-xr-xrailties/dispatches/dispatch.fcgi30
1 files changed, 18 insertions, 12 deletions
diff --git a/railties/dispatches/dispatch.fcgi b/railties/dispatches/dispatch.fcgi
index 1c88d902df..ffe5b57812 100755
--- a/railties/dispatches/dispatch.fcgi
+++ b/railties/dispatches/dispatch.fcgi
@@ -1,20 +1,26 @@
#!/usr/local/bin/ruby
-require File.dirname(__FILE__) + "/../config/environment"
-require 'dispatcher'
-require 'fcgi'
+FASTCGI_CRASH_LOG_PATH = "#{RAILS_ROOT}/log/fastcgi.crash.log"
-log_file_path = "#{RAILS_ROOT}/log/fastcgi.crash.log"
+def dispatcher_error(e, msg = "")
+ error_message = "[#{Time.now}] Dispatcher failed to catch: #{e} (#{e.class})\n #{e.backtrace.join("\n ")}\n#{msg}"
+ Logger.new(FASTCGI_CRASH_LOG_PATH).fatal(error_message)
+rescue Object => log_error
+ STDERR << "Couldn't write to #{FASTCGI_CRASH_LOG_PATH} (#{e} [#{e.class}])\n" << error_message
+end
-FCGI.each_cgi do |cgi|
- begin
- Dispatcher.dispatch(cgi)
- rescue Object => e
- error_message = "[#{Time.now}] Dispatcher failed to catch: #{e} (#{e.class})\n #{e.backtrace.join("\n ")}\n"
+begin
+ require File.dirname(__FILE__) + "/../config/environment"
+ require 'dispatcher'
+ require 'fcgi'
+
+ FCGI.each_cgi do |cgi|
begin
- Logger.new(log_file_path).fatal(error_message)
- rescue Object => log_error
- STDERR << "Couldn't write to #{log_file_path} (#{log_error} [#{log_error.class}])\n" << error_message
+ Dispatcher.dispatch(cgi)
+ rescue Object => rails_error
+ dispatcher_error(rails_error)
end
end
+rescue Object => fcgi_error
+ dispatcher_error(fcgi_error, "FCGI process #{$$} killed by this error\n")
end \ No newline at end of file