Rails.cache throws "marshal dump" error when changed from memory store to memcached store
Posted
by gsmendoza
on Stack Overflow
See other posts from Stack Overflow
or by gsmendoza
Published on 2010-04-07T09:38:32Z
Indexed on
2010/04/08
7:53 UTC
Read the original article
Hit count: 583
ruby-on-rails
If I set this in my environment
config.action_controller.cache_store = :mem_cache_store
ActionController::Base.cache_store
will use a memcached store but Rails.cache will use a memory store 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 app, I use Rails.cache.fetch(key){ object }
to cache objects inside my helpers. All this time, I assumed that Rails.cache
uses the memcached store so I'm surprised that it uses memory store.
If I change the cache_store
setting 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, which is what I expect:
$ ./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 app, 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
meant to be a memory store? Should I call controller.cache_store.fetch
in the places where I call Rails.cache.fetch
?
© Stack Overflow or respective owner