我正在使用我的Rails項目中的高速緩存並希望過期特定url的高速緩存。我得到了下面的命令到期片段對應的URL傳遞:Rails從模型中過期片段高速緩存
ActionController::Base.new.expire_fragment("localhost:3000/users/55-testing-devise/boards/")
我很困惑在哪裏,我的Rails項目,以便使它運行起來,儘快把這個代碼作爲文本字段中的URL添加和點擊過期按鈕。
我正在使用我的Rails項目中的高速緩存並希望過期特定url的高速緩存。我得到了下面的命令到期片段對應的URL傳遞:Rails從模型中過期片段高速緩存
ActionController::Base.new.expire_fragment("localhost:3000/users/55-testing-devise/boards/")
我很困惑在哪裏,我的Rails項目,以便使它運行起來,儘快把這個代碼作爲文本字段中的URL添加和點擊過期按鈕。
ActionController::Caching::Sweeper
是做這件事的好方法,它是Rails觀察者的一部分。
http://api.rubyonrails.org/classes/ActionController/Caching/Sweeping.html
class MyModelSweeper < ActionController::Caching::Sweeper
observe MyModel
def after_save(object)
expire_fragment('...')
end
end
你或許應該考慮不同的方法。模型不應該關心緩存如何工作,傳統上整個清理方法往往會變得複雜,笨拙,並且與其他代碼不同步。
基本上,你不應該手動過期片段。相反,一旦模型更新後,您更改緩存鍵/ URL(以便爲新版本創建新的緩存條目)。
現在的常識是使用Russian Doll Caching的方法。鏈接轉到一篇文章,解釋基礎知識,以及即將推出的Rails 4 will contain even better support。
這可能是大多數標準Rails應用程序的最佳方式。
expire_fragment不起作用,因爲您沒有將摘要添加到密鑰中。見DHH這裏:https://github.com/rails/cache_digests/issues/35
我已經張貼了相關回答有關緩存的JSON響應:https://stackoverflow.com/a/23783119/252799
我不想在模型中的觀察員。我已經在我的項目中實施了清掃工。但是,如果您希望在不清除完整cahe的情況下將URL過期,則可以這樣做。幫手是正確的地方嗎? – 2013-04-29 08:36:40