2012-02-16 3 views
0

У меня есть сайт, на котором я внедряю кэширование.Стратегия кэширования фрагментов Rails

Если возможно, я использовал кеширование действий, и у меня есть подметальные машины, чтобы истечь необходимые действия при создании/обновлении моделей.

В взглядов, которые подлежат caches_action я также фрагмент кэшируются некоторые партиалы так, что в парциальное у меня есть что-то вроде:

<% cache('video_content') do %> 
    Some content here 
<% end %> 

В моей video_sweeper я пытаюсь истечь этот фрагмент с:

expire_fragment('video_content') 

Этот фрагмент еще не истек.

Потому что я использую caches_action, а фрагмент игнорируется по какой-то причине? i.e мне нужно сделать выбор между использованием caches_action или фрагментацией кеширования?

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

Так что мой вопрос в значительной степени, почему мой кеш фрагмента не истечет при вызове из моей подметальной машины и это потому, что я тоже использую caches_action?

Обновление: Дальше, копаясь в моих журналах, я действительно вижу, что уборочная машина заканчивает мой фрагмент.

Expire fragment views/video_content (0.7ms) 

Однако, играя в консоли до истечения срока действия, фрагмент, похоже, не существует.

ruby-1.9.2-p136 :004 > Rails.cache.exist?('views/video_content') 
=> false 

Опять же, это заставляет меня думать, что я использую caches_action, что парциальное будет редко хит, за исключением того, когда действие истекло, для кэширования.

ответ

1

Кэширование действий также является технически типом кэширования фрагментов, который обертывает ваш фрагмент. Таким образом, ваш фрагмент может истечь, но это не будет видно до истечения срока действия кеша действия.

Так что, если вы хотите, чтобы ваш фрагмент истек, вам также нужно истекло действие. Но кэширование фрагментов не без цели. Если действие истекает, будет использоваться кешированный фрагмент.

0

Кэширование действий кэширует полное действие для вас. Таким образом, использование кеширования действий над действием контроллера (скажем, «show_video») и добавление кеширования фрагментов в том же представлении «show_video» не будет иметь большого эффекта. Вы должны использовать их с умом.

В дальнейшем, как вы сказали, кеширование фрагментов заканчивается, но когда действие вызывается, выполняется кэшированное действие. Таким образом, в вашем случае вам нужно также истекло действие кэша действий.

Я хотел бы предложить вам пройти через видео проливает Грег Поллак check this out

+0

Спасибо за ответ. Посмотрите эти видео, очень спасибо за головы. – Pete

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