我们使用 Rails 的caches_action
方法和 Redis 来实现普通页面的缓存。这是一个非常动态的站点,因此具有不同 URL 参数的页面必须在缓存中保持不同(例如?page=1
vs ?page=2
)。但只要 URL 匹配,内容就可以被缓存并提供给多个访问者。
由于我们很大一部分流量来自 Adwords 广告,我们的许多用户在访问我们的页面时在 URL 中使用了gclid参数,这使得缓存毫无用处。我通过从用于识别唯一 URL 的缓存路径中排除 gclid 来解决此问题:
caches_action :search,
:expires_in => 10.minutes,
:cache_path => Proc.new { |c| c.params.except('gclid') }
这工作了一段时间,直到我意识到我们的 Analytics 数据已关闭,因为我们缓存的 HTML 包含来自以前访问的 gclid 参数的内部链接。
因此,解决方案非常简单——每次生成链接时,我都需要手动 exclude gclid
,例如:
link_to 'some page', params.except('gclid')
我的问题是:有没有办法自动gclid
从所有生成的链接中排除?不必在整个站点中手动执行此操作会非常方便。