2009-08-08 22 views
1

我有一個可以從緩存中受益的控制器操作。但是,當我通過通常打開動作緩存時:是否有可能使caches_action對通過HTTP POST訪問的rails控制器方法有效?

caches_action :myaction, :expires_in=>15.minutes 

...緩存不會被調用。看起來這是因爲該操作是使用HTTP POST調用的。對於使用HTTP GET調用的類似操作,緩存工作正常。

我意識到使用POST進行此操作可能不是很好的風格,並且會破壞資源路由約定 - 可能這也是爲什麼響應沒有被緩存,即使它可能是。但是現在我堅持下去,因爲這是客戶目前所做的事情,我不能輕易改變它。

那麼,有沒有辦法強制緩存這種方法,即使它通過POST訪問?

編輯:我應該澄清,也許POST沒有副作用,所以緩存動作是安全的。它本來應該是一個GET,但它現在不是,也不容易被改變。此外,瀏覽器或代理不會緩存響應並不重要。

回答

1

發佈數據的內容在每個帖子中是否相同?我懷疑他們沒有,這就是爲什麼行動不會緩存。

一對夫婦的方式來解決這個問題:

1)忘掉caches_action,方便地使用Rails.cache你的控制器內緩存的控制器代碼

2)使用昂貴的部件Rack中間件/ Metal Endpoint接收來自其他應用程序的發佈數據,並將數據鎖定到您想要的形狀。

編輯:

進出口運行的Rails 2.3.3,我可以證實它確實緩存POST請求

爲了檢查的目的,而你的發展,確保你已經設置perform_caching爲true發展.RB:

config.action_controller.perform_caching    = true 

同時確保其在production.rb相同

我測試了這個場景在我的控制下:

caches_action :index 

def index 
    @listings = Listing.find(:all) 
end 

同時使用GET 和POST請求這個緩存的預期。 此外,我嘗試設置HTTP頭的Cache-Control:我的文章客戶端上無緩存和緩存仍然

如果你正在運行OSX使用此工具真棒http://ditchnet.org/httpclient/創建GET和POST請求

+0

參數的作用是相同的 - 是否有其他數據與帖子(標題?),可能會導致它不緩存?我沒有看到日誌中的那些 - 但也許客戶端正在設置標題以要求繞過緩存?我會給Rails.cache建議一個去。對於機架/金屬,我需要導軌2.3?目前我在2.2.2上。 – frankodwyer 2009-08-15 20:23:38

+0

請參閱上面的修改意見。 – ADAM 2009-08-16 01:27:46

相關問題