Question

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?

Was it helpful?

Solution

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.

OTHER TIPS

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

No time to explain, but it worked for me.

The proper way to do this is:

cache :news do

  ...
end

And then in your sweeper:

expire_fragment :news

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top