2009-12-10 3 views
0

레일스에서 ​​디렉토리를 만료시키는 방법은 무엇입니까?디렉토리를 만료시키는 방법에 대한 레일스?

블로그에 /posts/이 모든 게시물을 나열합니다. 컨트롤러 포스트, 액션 인덱스. 꽤 표준적인 것들.

게시물은 will_paginate를 사용하여 10 개의 그룹으로 페이지가 매겨집니다.

페이지는 다음과 같이 캐시되고있다 :이 페이지를 만료해야하는 경우

/posts/ 
/posts/index/2 
/posts/index/3 
/posts/index/4 
... 
/posts/index/134 
/posts/index/135 
... 
etc.. 

expire_page(posts_path)이 일을하지 않습니다, 그것은 단지 /posts.html 만료됩니다.

페이지가 매겨진 페이지를 만료시키는 가장 좋은 방법은 무엇입니까? 페이지 수가 정해지지 않으므로 /posts/index/ 디렉토리 만료시겠습니까? 디렉토리를 어떻게 만료시킬 수 있습니까?

감사

답변

4

페이지 캐싱을하고 있습니까? 왜 그냥 디렉토리를 삭제하지?

system("rm -rf #{RAILS_ROOT}/public/posts") 
#Or, in more Rubyish code 
FileUtils.rm_rf "#{RAILS_ROOT}/public/posts" 
+0

나는 당신의 대답과 비슷한 것을하고 결국 올바른 방향으로 나를 가리켰다. 고마워. 컨트롤러 및 스위퍼가 많은 경우 페이지 캐싱이 악몽으로 바뀔 수 있음을 알게되었습니다. – deb

0

당신은 expire_fragment하는 정규 표현식을 전달할 수는 :

expire_fragment(r%{/posts/index/\d+}) 

그러나 캐시 저장소가 모든 키를 통해 반복 할 경우에만 작동하는지 경고. 예를 들어 memcached에서는 작동하지 않습니다.

편집 : 페이지 캐싱이고 조각 캐싱이 아닙니다. expire_page가 Regexp를 허용하지 않는 것 같습니다. 흠.

0

해당 페이지를 만료해야 할 때 스위퍼를 실행하고 싶다는 소리가 들립니다. 이 레일 질투를 확인하면 해시 PARAMS의 일부 세트 페이지를 제거 할 수없는 경우 http://railsenvy.com/2007/02/28/rails-caching-tutorial#sweepers

를 게시 한 후

좀 더있을 수 있습니다 http://railsenvy.com/2007/02/28/rails-caching-tutorial#clearing에서 캐시 된 파일의 전체 디렉토리를 제거하는 예는있다 당신을 도울 수있는 그 기사의 정보, 그것은 모든 레일 캐싱에 대한 정말 좋은 2 부분 설명입니다.

관련 문제