RailsのActiveStorageを使ってs3に格納するケースは多々あると思います。
s3に格納する際にprefixをつける方法を紹介します。
前提としてGem「aws-sdk-s3」を利用しているため、事前に設定してから下記の設定を行なってください。
s3のActiveStorageのサービスをオーバーライドする
下記のファイルを作成します。
作成場所は「lib/active_storage/service/my_s3_service.rb」です。
require 'active_storage/service/s3_service' module ActiveStorage class Service::MyS3Service < Service::S3Service private def object_for(key) bucket.object(prefix(key)) end def prefix(key) return "MyFolder/#{key}" end end end
storage.ymlでオーバーライドしたクラスを指定する
dev: service: MyS3 access_key_id: xxx secret_access_key: xxx region: xxx bucket: xxx
まとめ
設定は以上です。
良くも悪くもactive_strage_blobsのkeyにはs3のprefixが入らない形です。
その意味ではprefixがテナントIDなど何かに依存した仕様の場合は都合が良いかと思います。