在rails中进行HTTP缓存时,曾经使用过:
fresh_when etag:@ user,public:true
问题在于,如果您有机会获取页面的html,则缓存页面将不再有效。因此,我们需要一种方法来在每次更改内容时使页面/ etag无效。
一种方法是每次按部署时更改RAILS_CACHE_ID Etag busting on deployment。但是,这样做会导致所有etags,因为每个部署的所有页面都会过期。
我宁愿有一个解决方案,我可以为单个页面过期单个标签。
我可以用这样的版本生成我自己的etag: fresh_when etag:(@ user.updated_at.to_s +“V1”),public:true
但这并不像“Rails方式”。更优雅的解决方案?
答案 0 :(得分:1)
There's an update to this article具有相应的库,因此您只需在config中设置版本即可。请参阅https://github.com/n8/bust_rails_etags
上的自述文件答案 1 :(得分:0)
如果您正在使用Capistrano或部署策略,其中Rails.root
值在每个部署中发生更改,您可以将其添加到应用程序控制器:
class ApplicationController < ActionController::Base
# This causes http request caching to expire when we deploy.
# The app is deployed /mnt/code/releases/<timestamp>
etag { $etag_cache_control_fragement ||= Rails.root.to_s.split("/").last }
参考此处:http://api.rubyonrails.org/v5.1/classes/ActionController/ConditionalGet/ClassMethods.html