2009-12-10 40 views
0

如何在Rails中过期目录?Rails如何过期目录?

我有一个博客,其中/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 2010-02-26 22:49:41

0

您可以通过一个正则表达式来expire_fragment:

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

但要注意,只有当你的缓存存储能够遍历所有键的作品。例如,它不适用于memcached

编辑:我看到这是页面缓存,而不是片段缓存。看起来expire_page不接受正则表达式。嗯。

0

听起来就像你想要一台清扫车在你需要过期那些页面时运行。看看这个Rails的妒嫉后http://railsenvy.com/2007/02/28/rails-caching-tutorial#sweepers

如果您不能删除一些集哈希则params的页面,再有就是在http://railsenvy.com/2007/02/28/rails-caching-tutorial#clearing

可能有更多的一些删除缓存文件的整个目录的例子这篇文章中的信息可以帮助你,它是所有Rails缓存的非常好的2部分解释。