如果我在我的环境中设置它
config.action_controller.cache_store = :mem_cache_store
ActionController::Base.cache_store
将使用memcached存储,但Rails.cache将使用内存存储:
$ ./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={}>
在我的应用中,我使用Rails.cache.fetch(key){ object }
来缓存助手内的对象。一直以来,我都假设Rails.cache
使用了memcached存储,所以我很惊讶它使用了内存存储。
如果我将环境中的cache_store
设置更改为
config.cache_store = :mem_cache_store
ActionController :: Base.cache_store和Rails.cache现在将使用相同的内存存储,这是我所期望的:
$ ./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>
然而,当我运行应用程序时,我在调用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'
是什么给出的? Rails.cache
是否意味着要成为记忆库?我应该在我呼叫controller.cache_store.fetch
的地方拨打Rails.cache.fetch
吗?
答案 0 :(得分:2)
您无法封送其中包含过程或lambda的对象。这是Ruby解释器的当前限制。你究竟在缓存中存储了什么?整个物体?或只是ID?告诉我你在缓存中存储的内容,有人可以帮助你搞清楚。