开发者

Rails how to expire a directory?

How to expire a directory in Rails?

I have a blog where /posts/ lists all the posts. Controller posts, action index. Pretty standard stuff.

Posts are paginated in groups of 10 using will_paginate.

The pages are being cached like this:

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

When I need to expire this pages, expire_page(posts_path) won't do the job, it will only expire /posts.html.

What's the best way to expire the paginated pages? Since there is an undetermined number of pages, should I just expire the whole /posts/index/ directory? How can I expir开发者_如何学Goe a directory?

thanks


You're doing page caching, right? Why not just delete the directory?

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


You can pass a Regexp to expire_fragment:

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

But be warned that only works when your cache store is capable of iterating over all keys. For example, it doesn't work with memcached.

Edit: I see this is page caching, not fragment caching. It seems expire_page does not accept a Regexp. Hmm.


Sounds like you want a sweeper to run when you need to expire those pages. Check out this Rails Envy post http://railsenvy.com/2007/02/28/rails-caching-tutorial#sweepers

If you can't remove your pages with some set of hash params, then there is an example of removing an entire directory of cached files at http://railsenvy.com/2007/02/28/rails-caching-tutorial#clearing

There might be some more info in that article that could help you, it is a really good 2 part explanation of all Rails caching.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜