#ruby-on-rails #caching #page-caching
#ruby-on-rails #кэширование #кэширование страницы
Вопрос:
Я пытаюсь реализовать кэширование в rails и хочу кэшировать всю домашнюю страницу. Пока самый быстрый способ — использовать cache_page :home
метод в контроллере, но, похоже, он не работает ни разу. Это мой home
метод.
def home
@banners = BannerUpload.order('series').with_attached_image
img = ActionController::Base.helpers.asset_path("share-meta.png")
@sections = Section.includes(:homepage_items).where(active: true).order('position')
@testimonials = Testimonial.where(status: true)
end
это ошибка, которую я получаю:
undefined method each_with_index for nil:NilClass
для @banners
объекта означает, что запрос не выполняется даже в первый раз.
Я также не смог найти ни одной статьи по этому вопросу. Я пробовал устанавливать разные хранилища, но без помощи:
config.cache_store = :mem_cache_store
или config.cache_store = :memory_store
и т. д
Редактировать:
Я сам это решил. На самом деле я не знаю о том факте, что кэширование страниц по умолчанию не включено в rails. Поэтому мне пришлось включить его в gem ‘actionpack-page_caching’, после чего он работал нормально.
Комментарии:
1. Я не понимаю, как кэширование может привести к нулевой ошибке — вы уверены, что ваша страница работает без кэширования?
Ответ №1:
Как вы говорите: запрос не выполняется даже в первый раз. Похоже, что это равно @banners
нулю, и вы хотите вызвать each_with_index
его, это не имеет ничего общего с кэшированием. На ваш взгляд, вы можете сначала проверить, @banners
не равно нулю, а затем вызвать each_with_index
его. Ваш кэш будет работать, если вы исправите ошибку.
Ответ №2:
Я сам это решил. На самом деле я не знаю о том факте, что кэширование страниц по умолчанию не включено в rails. Поэтому мне пришлось включить его gem 'actionpack-page_caching'
после того, как он работал нормально.