proc를 취하는 외부 서비스로 레일 요청을 캐시하려고합니다.Proc를 캐싱의 키로 사용하십시오.
2 개의 요청을 구분할 수 있도록하려면 proc이 레일스 캐시 키의 일부인 것이 중요합니다.
그러나 동일한 proc 및 proc 코드의 값을 가진 여러 요청은 매번 다른 proc 객체로 평가됩니다.
예는 :
#<Proc:[email protected]/Users/app/development/work/runner.rb:10>
#<Proc:[email protected]/Users/app/development/work/runner.rb:10>
따라서, 심지어 같은 요청에 대해 캐시 미스를 얻을.
코드와 변수 값 측면에서 procs가 동일하면 동일한 것으로 평가되는 캐시 키에서/proc 블록을 어떻게 사용합니까?
서비스 호출이
def some_method
call_service do
a= 3;
b=6
end
end
def call_service(block)
Rails.cache.fetch(Date.today, block) {
external_service(&block)
}
end
I want to be able to compare blocks :
eg
{a=3, a*a} == {a=3, a*a} => True
{a=3, a*a} == {a=4, a*a} => false
{a=3, a*a} == {a=4, a*a*a} => False
내가 사용하려고
,
block.source
RubyVM::InstructionSequence.of(block).disasm
그러나 그들 중 누구도 같은이 변수의 값 즉, 블록의 상태를 캡처입니다 (A = 3 etc)
레일에서 이러한 유형의 캐싱을 수행하는 가장 좋은 방법은 무엇입니까?
P.S : 캐시