From e4f07888ceca3c2ac11818a45cc3374537737e8e Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 20 Feb 2005 17:18:59 +0000 Subject: Made caching work for WEBrick and lighttpd by appending .html for all URLs not already containing a dot git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@715 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_controller/caching.rb | 9 +++------ actionpack/lib/action_controller/components.rb | 6 ++++-- railties/lib/webrick_server.rb | 13 +++++++++++++ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/actionpack/lib/action_controller/caching.rb b/actionpack/lib/action_controller/caching.rb index 996b5af08d..98dd9c9df6 100644 --- a/actionpack/lib/action_controller/caching.rb +++ b/actionpack/lib/action_controller/caching.rb @@ -90,11 +90,7 @@ module ActionController #:nodoc: private def page_cache_path(path) - if path[-1,1] == '/' - page_cache_directory + path + '/index' - else - page_cache_directory + path - end + page_cache_directory + path + ".html" end end @@ -115,13 +111,14 @@ module ActionController #:nodoc: # If no options are provided, the current +options+ for this action is used. Example: # cache_page "I'm the cached content", :controller => "lists", :action => "show" def cache_page(content = nil, options = {}) + logger.info "Cached page: #{options.inspect} || #{caching_allowed}" return unless perform_caching && caching_allowed self.class.cache_page(content || @response.body, url_for(options.merge({ :only_path => true }))) end private def caching_allowed - !@request.post? && (@request.parameters.reject { |k, v| %w( id action controller ).include?(k) }).empty? + !@request.post? end end diff --git a/actionpack/lib/action_controller/components.rb b/actionpack/lib/action_controller/components.rb index 877d8888bd..6371a4255d 100644 --- a/actionpack/lib/action_controller/components.rb +++ b/actionpack/lib/action_controller/components.rb @@ -5,8 +5,9 @@ module ActionController #:nodoc: base.helper do def render_component(options) @controller.logger.info("Start rendering component (#{options.inspect}): ") - @controller.send(:component_response, options).body + result = @controller.send(:component_response, options).body @controller.logger.info("\n\nEnd of component rendering") + return result end end end @@ -15,8 +16,9 @@ module ActionController #:nodoc: def render_component(options = {}) #:doc: response = component_response(options) logger.info "Rendering component (#{options.inspect}): " - render_text(response.body, response.headers["Status"]) + result = render_text(response.body, response.headers["Status"]) logger.info("\n\nEnd of component rendering") + return result end private diff --git a/railties/lib/webrick_server.rb b/railties/lib/webrick_server.rb index 5814f87a06..22cdc9a845 100644 --- a/railties/lib/webrick_server.rb +++ b/railties/lib/webrick_server.rb @@ -6,6 +6,7 @@ require 'stringio' include WEBrick + class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet REQUEST_MUTEX = Mutex.new @@ -42,16 +43,28 @@ class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet def handle_file(req, res) begin + add_dot_html(req) @file_handler.send(:do_GET, req, res) + remove_dot_html(req) return true rescue HTTPStatus::PartialContent, HTTPStatus::NotModified => err res.set_error(err) return true rescue => err return false + ensure + remove_dot_html(req) end end + def add_dot_html(req) + if /^([^.]+)$/ =~ req.path then req.instance_variable_set(:@path_info, "#{$1}.html") end + end + + def remove_dot_html(req) + if /^([^.]+).html$/ =~ req.path then req.instance_variable_set(:@path_info, $1) end + end + def handle_dispatch(req, res, origin = nil) env = req.meta_vars.clone env["QUERY_STRING"] = req.request_uri.query -- cgit v1.2.3