我有這個在我的控制器:爲什麼ActiveRecord緩存在請求之間找到(:all)?
def frontpage
@sections = Section.all
end
在生產環境中,查詢請求似乎之間進行緩存。直到我重新啓動應用程序,@sections
始終是相同的。爲什麼以及如何解決這個問題?我還應該提到,我在生產中使用Postgres,這可能是原因嗎?
我有這個在我的控制器:爲什麼ActiveRecord緩存在請求之間找到(:all)?
def frontpage
@sections = Section.all
end
在生產環境中,查詢請求似乎之間進行緩存。直到我重新啓動應用程序,@sections
始終是相同的。爲什麼以及如何解決這個問題?我還應該提到,我在生產中使用Postgres,這可能是原因嗎?
我相信在您的生產環境中,您已經在某處啓用了緩存。雖然我不能告訴你爲什麼和在那裏,我可以給你一個解決方案:
def frontpage
uncached do
@sections = find(:all)
end
end
至少它應該做的伎倆
E:這樣做的好處是,它不僅影響塊內的代碼。其他一切應該仍然被緩存。
如果操作本身已被緩存,則不起作用。 –
查詢不會在請求之間進行緩存,但操作可能是。您的控制器中是否定義了cache_action
或其他緩存機制?
編輯:找出如果這是你的行動應該被緩存,把這個在你的行動:
def frontpage
return render :text => Time.now.to_s
...
end
看到它它改變。
查看this answer從相關問題。如果您的配置設置爲緩存,那麼您應該將其關閉(至少在開發過程中)。否則,如果您想使特定頁面的緩存無效,您可以查看在控制器中定義的方法:
private
def invalidate_cache
Rails.cache.delete("/sections")
end
你需要指定何時被調用,但它會做的伎倆。
你如何確定查詢被緩存? –