aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2005-02-20 17:18:59 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2005-02-20 17:18:59 +0000
commite4f07888ceca3c2ac11818a45cc3374537737e8e (patch)
treeb7431ec26eb3087cc17439026586e0664549a3d7
parent69d0f50206bcca5d6b7d9c491637509af434651c (diff)
downloadrails-e4f07888ceca3c2ac11818a45cc3374537737e8e.tar.gz
rails-e4f07888ceca3c2ac11818a45cc3374537737e8e.tar.bz2
rails-e4f07888ceca3c2ac11818a45cc3374537737e8e.zip
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
-rw-r--r--actionpack/lib/action_controller/caching.rb9
-rw-r--r--actionpack/lib/action_controller/components.rb6
-rw-r--r--railties/lib/webrick_server.rb13
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