If I installed it in my environment
config.action_controller.cache_store = :mem_cache_store
ActionController::Base.cache_store will use memcached storage, but Rails.cache uses memory instead:
$ ./script/console >> ActionController::Base.cache_store => #<ActiveSupport::Cache::MemCacheStore:0xb6eb4bbc @data=<MemCache: 1 servers, ns: nil, ro: false>> >> Rails.cache => #<ActiveSupport::Cache::MemoryStore:0xb78b5e54 @data={}>
In my application, I use Rails.cache.fetch(key){ object } to cache objects inside my helpers. All this time, I assumed that Rails.cache uses memcached storage, so I'm surprised that it uses memory.
If I changed the cache_store parameter in my environment to
config.cache_store = :mem_cache_store
both ActionController :: Base.cache_store and Rails.cache will now use the same memory store as expected:
$ ./script/console >> ActionController::Base.cache_store => #<ActiveSupport::Cache::MemCacheStore:0xb7b8e928 @data=<MemCache: 1 servers, ns: nil, ro: false>, @middleware=#<Class:0xb7b73d44>, @thread_local_key=:active_support_cache_mem_cache_store_local_cache> >> Rails.cache => #<ActiveSupport::Cache::MemCacheStore:0xb7b8e928 @data=<MemCache: 1 servers, ns: nil, ro: false>, @middleware=#<Class:0xb7b73d44>, @thread_local_key=:active_support_cache_mem_cache_store_local_cache>
However, when I run the application, I get a marshal dump error in the line where I call Rails.cache.fetch(key){ object }
no marshal_dump is defined for class Proc Extracted source (around line #1): 1: Rails.cache.fetch(fragment_cache_key(...), :expires_in => 15.minutes) { ... } vendor/gems/memcache-client-1.8.1/lib/memcache.rb:359:in 'dump' vendor/gems/memcache-client-1.8.1/lib/memcache.rb:359:in 'set_without_newrelic_trace'
What gives? Is Rails.cache storage facility? Should I call controller.cache_store.fetch where I call Rails.cache.fetch ?