Fixing the Rails 3 Fragment Cache Path

Let’s say you were using Rails 2.3.x, and you made the (wise) decision to implement heavy fragment caching. Then let’s say that you updated to Rails 3.x. At that point, you probably noticed that Rails 3 does something seriously annoying with the paths where it caches fragments.

In Rails 2, doing this:

<% cache('posts/123/123456/main') do %>

Gave you a cache file that looks like this:

RAILS_ROOT/tmp/cache/views/posts/123/123456/main.cache

However, in Rails 3, the same cache code results in a cache file that looks like this:

RAILS_ROOT/tmp/cache/925/AB2/posts%2F123%2F123456%2Fmain

WTH? That’s not documented in the Rails 3 API. So what’s going on, and how do you make Rails 3’s fragment caching work like it used to instead of using those crazy hash subdirectories? Read on!

(more…)