Rails with Alchemy-正确设置Cache-Control标头

时间:2018-12-18 12:06:20

标签: ruby-on-rails http-caching alchemy-cms

我有一个带有Devise和Alchemy CMS的应用程序,当我登录时,“登录”按钮应更改为“注销”,但没有。我认为已启用HTTP缓存。如果注销,我将重定向到主页,并且在请求标头中可以看到以下内容:

/ users / sign_out

Status Code: 302
cache-control:no-cache

但是,如果我转到另一页,该按钮仍显示“注销”。 如果刷新主页,则会在标题中看到以下内容:

/

Request Method:GET
Status Code:200  (from disk cache)
cache-control:public
last-modified:Mon, 17 Dec 2018 19:32:08 GMT

如果我登录并转到另一页面,该按钮将显示“登录”。在标题中,我看到以下内容:

/ some / other / url

Request Method:GET
Status Code:200  (from disk cache)
cache-control:public
last-modified:Mon, 17 Dec 2018 19:32:08 GMT

有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我必须升级到4.0稳定版,这会在头文件中添加must_revalidate并覆盖render_fresh_page?方法https://github.com/AlchemyCMS/alchemy_cms/blob/4.0-stable/app/controllers/alchemy/pages_controller.rb#L192

看起来像这样:

app / controllers / alchemy / pages_controller_extension.rb

Alchemy::PagesController.class_eval do
  def render_fresh_page?
    flash.present? || !@page.cache_page? || stale?(etag: page_etag,
      last_modified: @page.published_at,
      public: !@page.restricted,
      template: 'pages/show')
  end
end