ActiveStorage Disk サービスのキャッシュ制御を設定するにはどうすればよいですか?
概要
ActiveStorage を備えたシンプルな Rails 6 アプリがあります。ローカルディスクストレージを使用しています。このように表現 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
Cache-Control: max-age=0、private、must-revalidate というヘッダーが表示されます。
問題は、Rails でパブリック キャッシュ ヘッダーを設定できるようにするにはどうすればよいでしょうか?
解決策
@anothermhの回答に基づいて、Rails 7.1の最新バージョンを作成します。Zeitwerk以降、イニシャライザから直接コントローラまたはモデルを呼び出すのは困難です。
# config/initializers/active_storage_cache_control.rb
Rails.application.reloader.to_prepare do
ActiveStorage::DiskController.class_eval do
before_action only: [:show] do
response.set_header('Cache-Control', 'max-age=86400, public')
end
end
end