diff options
author | zedshaw <zedshaw@19e92222-5c0b-0410-8929-a290d50e31e9> | 2006-06-05 09:35:34 +0000 |
---|---|---|
committer | zedshaw <zedshaw@19e92222-5c0b-0410-8929-a290d50e31e9> | 2006-06-05 09:35:34 +0000 |
commit | f236812e152e4b53934c7049973460b223f14778 (patch) | |
tree | 31fc2013e2e6cd64d232cdee3d6cdb1efde07f65 /lib/mongrel/rails.rb | |
parent | 7880ca664e94df3c30f979e078458b9e56e178c5 (diff) | |
download | unicorn-f236812e152e4b53934c7049973460b223f14778.tar.gz |
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@227 19e92222-5c0b-0410-8929-a290d50e31e9
Diffstat (limited to 'lib/mongrel/rails.rb')
-rw-r--r-- | lib/mongrel/rails.rb | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/mongrel/rails.rb b/lib/mongrel/rails.rb index f108236..f3b9aef 100644 --- a/lib/mongrel/rails.rb +++ b/lib/mongrel/rails.rb @@ -44,6 +44,7 @@ module Mongrel class RailsHandler < Mongrel::HttpHandler attr_reader :files attr_reader :guard + @@file_only_methods = ["GET","HEAD"] def initialize(dir, mime_map = {}) @files = Mongrel::DirHandler.new(dir,false) @@ -64,11 +65,12 @@ module Mongrel path_info = request.params[Mongrel::Const::PATH_INFO] page_cached = path_info + ".html" + get_or_head = @@file_only_methods.include? request.params[Mongrel::Const::REQUEST_METHOD] - if @files.can_serve(path_info) + if get_or_head and @files.can_serve(path_info) # File exists as-is so serve it up @files.process(request,response) - elsif @files.can_serve(page_cached) + elsif get_or_head and @files.can_serve(page_cached) # possible cached page, serve it up request.params[Mongrel::Const::PATH_INFO] = page_cached @files.process(request,response) @@ -77,8 +79,9 @@ module Mongrel cgi = Mongrel::CGIWrapper.new(request, response) cgi.handler = self + # ultra dangerous, but people are asking to kill themselves. here's the Katana @guard.lock unless ActionController::Base.allow_concurrency - # Rails is not thread safe so must be run entirely within synchronize + Dispatcher.dispatch(cgi, ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS, response.body) # This finalizes the output using the proper HttpResponse way @@ -89,7 +92,7 @@ module Mongrel STDERR.puts "Error calling Dispatcher.dispatch #{rails_error.inspect}" STDERR.puts rails_error.backtrace.join("\n") ensure - @guard.unlock + @guard.unlock unless ActionController::Base.allow_concurrency end end end @@ -154,6 +157,9 @@ module Mongrel require 'dispatcher' require 'mongrel/rails' + if ActionController::Base.allow_concurrency + log "[RAILS] ActionController::Base.allow_concurrency is true. Wow, you're very brave." + end @rails_handler = RailsHandler.new(ops[:docroot], ops[:mime]) end @@ -177,7 +183,7 @@ module Mongrel def setup_rails_signals(options={}) ops = resolve_defaults(options) setup_signals(options) - + if RUBY_PLATFORM !~ /mswin/ # rails reload trap("HUP") { log "HUP signal received."; reload! } |