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など何かに依存した仕様の場合は都合が良いかと思います。