diff options
author | zedshaw <zedshaw@19e92222-5c0b-0410-8929-a290d50e31e9> | 2006-03-25 21:15:30 +0000 |
---|---|---|
committer | zedshaw <zedshaw@19e92222-5c0b-0410-8929-a290d50e31e9> | 2006-03-25 21:15:30 +0000 |
commit | f4a5c938d461d9c5dc17f521c9efaaf352b931fa (patch) | |
tree | c8f5d6799e74a4b9dd6d533424ee093ef4d3beb4 /lib/mongrel/rails.rb | |
parent | 8287106809a82ccd1afba674740486946509b856 (diff) | |
download | unicorn-f4a5c938d461d9c5dc17f521c9efaaf352b931fa.tar.gz |
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@121 19e92222-5c0b-0410-8929-a290d50e31e9
Diffstat (limited to 'lib/mongrel/rails.rb')
-rw-r--r-- | lib/mongrel/rails.rb | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/lib/mongrel/rails.rb b/lib/mongrel/rails.rb index fb4e172..808d7d3 100644 --- a/lib/mongrel/rails.rb +++ b/lib/mongrel/rails.rb @@ -1,6 +1,62 @@ require 'mongrel' require 'cgi' +# Creates Rails specific configuration options for people to use +# instead of the base Configurator. +class RailsConfigurator < Mongrel::Configurator + + # Used instead of Mongrel::Configurator.uri to setup + # a rails application at a particular URI. Requires + # the following options: + # + # * :docroot => The public dir to serve from. + # * :environment => Rails environment to use. + # + # And understands the following optional settings: + # + # * :mime => A map of mime types. + # + # Because of how Rails is designed you can only have + # one installed per Ruby interpreter (talk to them + # about thread safety). This function will abort + # with an exception if called more than once. + def rails(location, options={}) + ops = resolve_defaults(options) + + # fix up some defaults + ops[:environment] ||= "development" + ops[:docroot] ||= "public" + ops[:mime] ||= {} + + if @rails_handler + raise "You can only register one RailsHandler for the whole Ruby interpreter. Complain to the ordained Rails core about thread safety." + end + + $orig_dollar_quote = $".clone + ENV['RAILS_ENV'] = ops[:environment] + require 'config/environment' + require 'dispatcher' + require 'mongrel/rails' + + @rails_handler = RailsHandler.new(ops[:docroot], ops[:mime]) + end + + + # Reloads rails. This isn't too reliable really, but + # should work for most minimal reload purposes. Only reliable + # way it so stop then start the process. + def reload! + if not @rails_handler + raise "Rails was not configured. Read the docs for RailsConfigurator." + end + + STDERR.puts "Reloading rails..." + @rails_handler.reload! + STDERR.puts "Done reloading rails." + + end +end + # Implements a handler that can run Rails and serve files out of the # Rails application's public directory. This lets you run your Rails # application with Mongrel during development and testing, then use it @@ -83,3 +139,21 @@ class RailsHandler < Mongrel::HttpHandler end end end + + +if $mongrel_debugging + + # Tweak the rails handler to allow for tracing + class RailsHandler + alias :real_process :process + + def process(request, response) + MongrelDbg::trace(:rails, "REQUEST #{Time.now}\n" + request.params.to_yaml) + + real_process(request, response) + + MongrelDbg::trace(:rails, "REQUEST #{Time.now}\n" + request.params.to_yaml) + end + end + +end |