簡體   English   中英

布局中的Rails Cached部分局部渲染兩次

[英]Rails Cached partial in layout is rendered twice

我正在嘗試緩存在布局中呈現的部分內容。 該部分的計算量很大,因此我只想計算一次。 它不是特定於控制器的,因此通常的片段緩存似乎不適用。 我決定改用Rails.cache.fetch('menu')進行緩存。 這是部分內容的樣子。

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

但是,當我這樣做時,它將部分渲染兩次。 由於某種原因,它停止在我的開發環境中執行此操作,因此我決定嘗試並部署它。 我對自己的生產環境不太幸運。 該部分本身會生成一個菜單,其中包含指向站點中許多記錄的鏈接,以幫助改善導航。

我最初嘗試將cache語句放入布局文件中,但隨后又渲染了兩次布局。

我最近添加了一個jQuery hack來刪除重復的html,以便現在它可以“工作”,但是我希望它能正常工作。 我不想麻煩安裝一些復雜的緩存系統(例如Redis),而這需要我運行另一個服務器程序。 那對於這項任務來說可能會太過分了。 導軌中必須有一些非常適合緩存部分布局的東西。

我應該嘗試完全不同的東西還是這是Rails中的錯誤? 如果是錯誤,那么我可以使用一種解決方法嗎?

我想到了。 我創建了一個幫助器方法來返回渲染的部分,而不是在視圖中緩存該部分。

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

然后,我在布局中所需的就是這行<%menu%>

嘗試清除生產緩存。 您可能有一個邏輯錯誤導致其渲染兩次。 在開發中,通常會禁用緩存,因此這就是為什么在解決問題時它在開發中消失​​了的原因。 如果已重新部署,則問題也可能與生產代碼無關,但是如果尚未清除緩存,它將繼續顯示緩存的邏輯錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM