设置Rails资产的缓存控制

时间:2018-07-26 13:58:32

标签: ruby-on-rails ruby ruby-on-rails-5

在我的application_controller.rb中有以下代码

before_action :set_cache_headers

def set_cache_headers
  response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
  response.headers["Pragma"] = "no-cache"
  response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
end

这也会导致我的资产也根据每个请求重新加载。在Rails中,如何在每个请求而不是资产上重新加载HTML?

我想要这样的东西(Rails中除外):

<filesMatch ".(css|jpg|jpeg|png|gif|js|ico|JPG|woff)$">
    Header set Cache-Control "max-age=2592000, public"
</filesMatch>

1 个答案:

答案 0 :(得分:2)

由于默认情况下在Rails for Prod env中将action_controller缓存设置为ON,因此也会设置Control-Cache。但是,ApplicationController中的过滤器将覆盖它,从而整个禁用缓存。 尝试将此行粘贴在config / initializers / assets.rb文件中:

Rails.application.config.public_file_server.headers = {
  'Cache-Control' => "public, max-age=#{some_number}"
}