0

如何使 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

3 回答 3

4

你在做页面缓存,对吧?为什么不直接删除目录?

system("rm -rf #{RAILS_ROOT}/public/posts")
#Or, in more Rubyish code
FileUtils.rm_rf "#{RAILS_ROOT}/public/posts"
于 2009-12-11T06:55:39.077 回答
0

您可以将正则表达式传递给 expire_fragment:

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

但请注意,仅当您的缓存存储能够迭代所有键时才有效。例如,它不适用于memcached.

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

于 2009-12-10T22:55:27.440 回答
0

听起来您希望在需要使这些页面过期时运行清扫器。查看这个 Rails Envy 帖子http://railsenvy.com/2007/02/28/rails-caching-tutorial#sweepers

如果您无法使用一组哈希参数删除您的页面,那么在http://railsenvy.com/2007/02/28/rails-caching-tutorial#clearing有一个删除整个缓存文件目录的示例

那篇文章中可能有更多信息可以帮助您,这是对所有 Rails 缓存的非常好的 2 部分解释。

于 2009-12-11T03:05:32.960 回答