2009-05-22 4 views
1

Этот человек меня озадачил.Rails - кеш фрагмента, не истекающий

У меня есть мнение с кэшированного фрагмента:

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

У меня есть уборочная машина, которая использует:

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

подметальной называется, как я могу видеть «expire_home_cache» в консоли вывода.

Но фрагмент не обновляется ...

Любые идеи?

ответ

2

Вы можете попробовать это:

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

и ...

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

... или попробовать это ...

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

Я имею в виду вопрос может быть что рубины или рельсы с трудом определяют, что именно ключ, и поэтому метод кеша и expire_fragment генерируют два разных кеша ке YS.

+0

В Rails 4.x вы также должны сделать 'кэш ("новости", skip_digest : true) '. – Kris

4

Попробуйте заменить expire_fragment(:key => "news") с ActionController::Base.new.expire_fragment(:key => "news")

Нет времени, чтобы объяснить, но он работал на меня.

+0

Жаль, что я мог бы поддержать это больше ... работал как шарм! – concept47

+0

Убедитесь, что вы положили --- cache_sweeper: whatever_sweeper --- в свой application_controller.rb, чтобы выше работали. – concept47

+0

У меня был необъяснимый пример, когда подметальная машина отказывалась истекать кеш для дочерней ассоциации, пока я не пробовал этот ответ, и это сработало. Я не понимаю, почему. Обратные вызовы подкачки вызывались, как и код expire_fragment. Странный. – twmills

0

Это не отвечает на ваш вопрос напрямую, но вы попробовали плагин timed_fragment_cache в качестве альтернативы?

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

Я нашел, что это гораздо более простой способ истекающий фрагментов в моих проектах.

1

Правильный способ сделать это:

cache :news do 

    ... 
end 

И тогда в вашей уборочную:

expire_fragment :news 
+0

Значит, ключ должен быть символом, а не строкой? –

+0

Вы можете сделать это строкой или символом, но не обязательно быть хешем. –

Смежные вопросы