Поскольку Rails 4 удалил кеширование страниц и кеширование действий, мне интересно, как Rails 4 может кэшировать действие, которое не имеет переменных и имеет только html в представлении? Должен ли я фрагментировать кэш статического HTML в представлении? Как мне установить etag / fresh_when, когда нет модели, с которой он истекает? Я изо всех сил пытаюсь найти пример или соглашение о кешировании того, что должно быть самой простой страницей для кеширования.
Одно замечание заключается в том, что, хотя представление полностью статично, на странице все еще есть динамическая панель навигации в зависимости от того, вошел ли пользователь в систему или нет. Как бы вы справились со статической страницей, подобной этой, не прибегая к кэшированию действий, поскольку она была удалена и было установлено соглашение не использовать версию gem?
Пример:
class HomesController < ApplicationController
def index
end
end
дома / index.html.erb
<div>A bunch of normal html tags with no erb</div>
Изменить: на основе ответа @severin и моих собственных исследований, вот что я придумал до сих пор.
class HomesController < ApplicationController
def index
fresh_when(["some-identifier", current_user, flash])
end
end
Кроме того, я использую https://github.com/n8/bust_rails_etags, чтобы сбросить все etags после развертывание, потому что представление могло измениться между развертываниями. Я думаю, что это довольно хорошо покрывает etag, хотя мне все еще любопытно, будет ли свежий, когда будет автоматически включать какой-либо идентификатор о представлении, и нужен ли "some-idnetifier"? Будет ли проблема, что иногда current_user и flash будут равны нулю?
Теперь о втором пункте фрагментного кеширования статического содержимого. Я предполагаю, что если бы я сделал:
cache "v1" do
all my html
end
Мне нужно было всегда помнить об изменении идентификатора кеша при изменении страницы, иначе мое приложение будет обслуживать устаревший контент. Есть ли способ автоматизировать это, или это уже обрабатывается рельсами? Было бы неплохо просто кэшировать последний раз, когда представление было обновлено, или что-то умное, чтобы мне не приходилось отслеживать, когда мой статический контент изменяется.