Rails caches_page не считывает переменные экземпляра и выдает ошибку

#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' после того, как он работал нормально.