Rails caches_page 没有读取实例变量并抛出错误

Posted

技术标签:

【中文标题】Rails caches_page 没有读取实例变量并抛出错误【英文标题】:Rails caches_page is not reading instance variables and throwing error 【发布时间】:2021-03-09 21:20:03 【问题描述】:

我正在尝试在 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' 中,之后它工作正常。

【问题讨论】:

我看不出缓存如何导致 nil 错误 - 您确定您的页面在没有缓存的情况下可以正常工作吗? 【参考方案1】:

就像你说的:即使是第一次查询也没有命中。 所以看起来@banners 是nil,你想在上面调用each_with_index,这与缓存无关。 在您看来,您可以先检查@banners 是否不为零,然后调用each_with_index。如果您修复了错误,您的缓存将起作用。

【讨论】:

【参考方案2】:

我自己解决了。 实际上我不知道默认情况下页面缓存不包含在rails中。所以我必须将它与gem 'actionpack-page_caching' 一起包含,然后它才能正常工作。

【讨论】:

以上是关于Rails caches_page 没有读取实例变量并抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

配置 nginx 以提供缓存的图像

我可以在 rails 中读取 file_store 缓存文件的内容吗?

Ruby on rails 辅助方法实例变量

CKEditor的第二个实例没有保存到db | Ruby on Rails

凭证文件未在 Amazon Linux 上读取 Rails 6.1

有没有办法绕过 Python list.append() 随着列表的增长而在循环中逐渐变慢?