2015-01-28 3 views
0

하나의 컨트롤러에서 이와 같이 레일 메모리 캐시를 사용합니다.레일 3 캐시 리턴 없음

def form_config_cache 
    Rails.cache.fetch("form_config", :expires_in => 12.hours) do 
     puts 'Building cache...' 
     form_config = s3_read_object('form_config.js') 
     return JSON.parse(form_config) 
    end 
    end 

정의 된 컨트롤러에서 정상적으로 작동합니다. 그러나 다른 컨트롤러에서 값을 읽으려고하면 그 값이 nil로 반환됩니다. 아무도 무슨 일이 일어나고 있는지 설명 할 수 있습니까? 여기에 다른 컨트롤러에서 읽으려고하는 방법이 나와 있습니다. return 반환 전체 방법을 형성하므로 캐시에 값을 저장 fetch의 비트는 결코 실행하지 않고 반환 read로 호출 아무것도 :

form_config = Rails.cache.read('form_config') 

답변

2

코드는 실제로 지금까지 아무 것도 캐시하지 않습니다.

def form_config_cache 
    Rails.cache.fetch("form_config", :expires_in => 12.hours) do 
    form_config = s3_read_object('form_config.js') 
    JSON.parse(form_config) 
    end 
end 
+0

확인 :

당신은 모든 next 또는 아무것도 사용하지 수 중 하나. 설명해 주셔서 감사드립니다. 하지만 또 다른 설명이 필요합니다. 캐시 블록 내부에서 로그 문을 사용하고 있었는데, 한 번만 나타났습니다. 캐시 블록이 저장 될 때마다 실행되지 않는 이유는 무엇입니까? 나는 그 문장을 어디에서 로깅했는지 보여주기 위해 코드 블록을 업데이트했다. – 3coins