0

我有這個在我的控制器:爲什麼ActiveRecord緩存在請求之間找到(:all)?

def frontpage 
    @sections = Section.all 
end 

在生產環境中,查詢請求似乎之間進行緩存。直到我重新啓動應用程序,@sections始終是相同的。爲什麼以及如何解決這個問題?我還應該提到,我在生產中使用Postgres,這可能是原因嗎?

+0

你如何確定查詢被緩存? –

回答

1

我相信在您的生產環境中,您已經在某處啓用了緩存。雖然我不能告訴你爲什麼和在那裏,我可以給你一個解決方案:

def frontpage 
    uncached do 
     @sections = find(:all) 
    end 
end 

至少它應該做的伎倆

E:這樣做的好處是,它不僅影響塊內的代碼。其他一切應該仍然被緩存。

+0

如果操作本身已被緩存,則不起作用。 –

0

查詢不會在請求之間進行緩存,但操作可能是。您的控制器中是否定義了cache_action或其他緩存機制?

編輯:找出如果這是你的行動應該被緩存,把這個在你的行動:

def frontpage 
    return render :text => Time.now.to_s 
    ... 
end 

看到它它改變。

0

查看this answer從相關問題。如果您的配置設置爲緩存,那麼您應該將其關閉(至少在開發過程中)。否則,如果您想使特定頁面的緩存無效,您可以查看在控制器中定義的方法:

private 
def invalidate_cache 
    Rails.cache.delete("/sections") 
end 

你需要指定何時被調用,但它會做的伎倆。

相關問題