2010-04-07 2 views
4

에 메모리 저장소에서 변경 "원수 덤프"오류가 발생Rails.cache가 내 환경에서이 설정하면 memcached를 저장

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 저장소를 사용한다고 가정했다.

나는

config.cache_store = :mem_cache_store 

내 환경에서 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은 메모리 저장소가 될 예정입니까? 내가 Rails.cache.fetch라고 부르는 곳에서 controller.cache_store.fetch으로 전화해야합니까?

답변

2

procs 또는 lambdas가있는 개체를 마샬링 할 수 없습니다. Ruby 인터프리터의 현재 제한 사항입니다. 캐시에 정확히 무엇을 저장하고 있습니까? 전체 개체? 아니면 그냥 신분증? 캐시에 저장중인 항목을 표시하고 누군가가 알아낼 수 있도록 도와 줄 수 있습니다.

+0

안녕 살릴. 네, 물건에 물건을 넣었어요. Rail.cache가 memcache 저장소 대신 메모리 저장소를 사용했기 때문에 이전에 작동했습니다. – gsmendoza

관련 문제