ruby-on-rails – 当从内存存储区更改为memcached存储区时,Rails.cache会抛出“marshal dump”错误

如果我在我的环境中设置它

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}的行中出现“marshal dump”错误

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是​​否意味着是一个内存存储?我应该在我调用Rails.cache.fetch的地方调用controller.cache_store.fetch吗?

最佳答案 您不能封送其中包含proc或lambdas的对象.这是Ruby解释器的当前限制.你究竟在缓存中存储了什么?整个物体?或只是ID?告诉我你在缓存中存储的内容,有人可以帮助你搞清楚.

点赞