在布局中缓存部分被渲染两次



我正在尝试缓存在布局中呈现的部分。这个偏导的计算量很大所以我只想计算一次。它不是控制器特定的,所以通常的片段缓存似乎不适用。我决定使用Rails.cache.fetch('menu')来缓存。下面是部分的内容:

<% Rails.cache.fetch('menu') do %>
  Partial code...
<% end %>

但是当我这样做时,它会渲染部分两次。由于某些原因,它在我的开发环境中停止了这样做,所以我决定尝试部署它。我的生产环境就没那么幸运了。该部分本身生成一个菜单,其中包含到站点中许多记录的链接,以帮助改进导航。

我最初尝试将缓存语句放在布局文件中,但随后它渲染了两次布局。

我最近添加了一个jQuery hack来删除重复的html,所以它现在有点"工作",但我宁愿让它正常工作。我不想麻烦地安装一些复杂的缓存系统,比如Redis,这需要我运行另一个服务器程序。这对这项任务来说太过分了。rails中一定有一些东西非常适合缓存部分布局。

我应该尝试一些完全不同的东西还是这是rails中的一个bug ?如果它是一个错误,然后有一个变通办法,我可以使用?

我明白了。我没有在视图中缓存局部,而是创建了一个helper方法来返回呈现的局部。

#Returns a menu for the application layout
def menu
  Rails.cache.fetch('menu') { render :partial => 'all/menu' }
end

那么我在布局中所需要的就是这一行<% menu %>

尝试清空生产缓存。很有可能您有一个逻辑错误,导致它呈现两次。在开发过程中,缓存通常是被禁用的,这就是为什么当你修复了这个问题后,它在开发过程中消失了。如果您已经重新部署,这个问题可能也从生产代码中消失了,但是如果缓存没有被清除,它将继续显示缓存的逻辑错误。

最新更新