Toby Hede
Toby Hede

Reputation: 37123

Rails - fragment cache not expiring

This one has me stumped.

I have a view with a cached fragment:

 - cache :key=>"news" do    
   %h2 News
   - etc

I have a sweeper that uses:

def expire_home_cache
  puts "expire_home_cache"
  expire_fragment(:key => "news") 
end

The sweeper is called as I can see "expire_home_cache" in the console output.

But the fragment is not updated ...

Any ideas?

Upvotes: 1

Views: 3092

Answers (4)

darth_schmoo
darth_schmoo

Reputation:

Try replacing expire_fragment(:key => "news") with ActionController::Base.new.expire_fragment(:key => "news")

No time to explain, but it worked for me.

Upvotes: 4

Mark S.
Mark S.

Reputation: 1082

The proper way to do this is:

cache :news do

  ...
end

And then in your sweeper:

expire_fragment :news

Upvotes: 1

tmarkiewicz
tmarkiewicz

Reputation: 515

This doesn't directly answer your question, but have you tried the timed_fragment_cache plugin as an alternative?

http://github.com/tricycle/timed_fragment_cache/tree/master

I found this to be a much simpler way of expiring fragments in my projects.

Upvotes: 0

dave elkins
dave elkins

Reputation: 331

You might try this:

   cache("news") do    
     %h2 News
     - etc
   end

and...

def expire_home_cache
  puts "expire_home_cache"
  expire_fragment("news") 
end

...or try this ...

 - cache({:key=>"news"}) do    
   %h2 News
   - etc

I am thinking the issue may be that ruby or rails is having a hard time determining what the key is exactly and so the cache method and expire_fragment are generating two different cache keys.

Upvotes: 2

Related Questions