Techioz Blog

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