ruby-on-rails 如何设置ActiveStorage磁盘服务的缓存控制?

rjee0c15  于 2022-12-20  发布在  Ruby
关注(0)|答案(1)|浏览(96)

我有一个带有ActiveStorage的简单Rails6应用程序。我使用本地磁盘存储。当我检查来自表示url的响应时,如下所示

http://localhost:3000/rails/active_storage/disk/some-long-hash/IMG_0951.jpeg?content_type=image%2Fjpeg&disposition=inline%3B+filename%3D%22IMG_0951.jpeg%22%3B+filename%2A%3DUTF-8%27%27IMG_0951.jpeg

我看到标题缓存控制:最大年龄=0,私有,必须重新验证
问题是如何让Rails设置具有一定年龄的公共缓存头?

oknrviil

oknrviil1#

用于ActiveStorage::DiskController#show方法是difficult to override,但它可以完成。
一种更简单的方法是为现有的#show方法添加一个after_action回调函数,以便在调用Cache-Control方法时插入其头:

# config/initializers/active_storage.rb

require 'active_storage/current'

ActiveStorage::Current.url_options = { host: 'localhost', port: 3000 }

require 'active_storage/set_current'
require 'active_storage/base_controller'
require 'active_storage/file_server'
require 'active_storage/disk_controller'

class ActiveStorage::DiskController < ActiveStorage::BaseController
  after_action do
    response.set_header('Cache-Control', 'max-age=3600, public') if action_name == 'show'
  end
end

然后,请求ActiveStorage URL会在响应中返回自定义的Cache-Control标头值:

HTTP/1.1 200 OK
Cache-Control: max-age=3600, public
...

相关问题