ActionController::Caching
# Action Controller Caching
Caching is a cheap way of speeding up slow applications by keeping the result of calculations, renderings, and database calls around for subsequent requests.
Note: To turn off all caching provided by Action Controller, set
config.action_controller.perform_caching = false
## Caching stores
All the caching stores from ActiveSupport::Cache are available to be used as backends for Action Controller caching.
Configuration examples (FileStore is the default):
config.action_controller.cache_store = :memory_store config.action_controller.cache_store = :file_store, '/path/to/cache/directory' config.action_controller.cache_store = :mem_cache_store, 'localhost' config.action_controller.cache_store = :mem_cache_store, Memcached::Rails.new('localhost:11211') config.action_controller.cache_store = MyOwnStore.new('parameter')
Included modules
- AbstractController::Caching
Files
- actionpack/lib/action_controller/caching.rb
3Notes
Using sweepers in script/runner
If you need to use some of your sweepers in a script/runner script or some rake task you can use this snipped:
require 'action_controller/test_process'
sweepers = [ProductSweeper, UserSweeper]
ActiveRecord::Base.observers = sweepers
ActiveRecord::Base.instantiate_observers
controller = ActionController::Base.new
controller.request = ActionController::TestRequest.new
controller.instance_eval do
@url = ActionController::UrlRewriter.new(request, {})
end
sweepers.each do |sweeper|
sweeper.instance.controller = controller
end
Your script will fire the ActiveRecord callbacks defined in that sweepers and you can use +expire_cache+, +expire_fragment+ and also the routing helpers you have defined (+hash_for_user_path+, +hash_for_product_path+, etc.).
Rails 2.1 caching internals
Rails 2.1 caching features are pretty much undocumented. Rob Anderton has documented some internal stuff here:
http://www.thewebfellas.com/blog/2008/6/9/rails-2-1-now-with-better-integrated-caching
Video tutorial
If you want to get up to speed with Rails' caching and haven't seen it already, definitely check out this video series on Scaling Rails: