views:

328

answers:

1

Hello,

setup

Controller -> Action Index 
  results = Model.all (SQL Call)

View
  Loop through and render partial from results.  Call count for result row  (SQL Call)

Partial 
  Manage result data and add point on Google map  

I'm attempting to cache this page so I add caches_page :index to my controller. When I view this page it creates a successful cache of the template (but not the partial). However it still makes all of the sql calls it shouldn't.

By changing it caches_action :index no sql calls are made, but I receive two 'Filter chain halted' errors.

The page renders correctly so I don't know if this is something I should look over or not.

If anyone is able to explain why caches_page isn't working, or where I should go from here on the Filter chain halted, I would greatly appreciate it.

Thanks!

A: 

Firstly, if you want to test caching in the development environment, make sure you set:

# in config/environments/development.rb
config.action_controller.perform_caching = true

Secondly, page caching works by writing a static HTML file to your /public directory with the same URL as the action you are caching. When a request comes in, your web server sees the static file and serves it, avoiding Rails entirely. It's the same way images are served. If you change config.action_controller.page_cache_directory your static files will be written to the wrong directory/URL and not noticed by the web server.

Lastly, make sure to delete the generated static files if you make changes to the cached actions that produce them, otherwise the modified actions will not be run. This is true even if you disable caching! You still need to delete the files.

Alex Reisner
This issue was due to the second listed above. We are currently working in a shared host so we can't configure the server. But for anyone else with this should keep reading: http://blog.hasmanythrough.com/2008/1/30/segregated-page-cache-storage
TravisKs