我想向 ActiveStorage 添加自定义服务,因为我想覆盖 ActiveStorage::Service::S3Service 服务的 url
方法,以便我可以在我的 S3 存储桶前面使用 CloudFront CDN。我想我不需要 presigned_url
参数,我只需要 key ,因为 CloudFront 实例将拥有对 S3 存储桶的完全读取访问权限。
最佳答案
在 ActiveStorage::Service
命名空间中添加一个类,它是 ActiveStorage::Service::S3Service
的子类。覆盖要覆盖的方法。例如:
# lib/active_storage/service/cloudfront_s3_service.rb
require "active_storage/service/s3_service"
class ActiveStorage::Service::CloudfrontS3Service < ActiveStorage::Service::S3Service
def url(key, **)
# ...
end
end
在
config/storage.yml
中引用您的自定义服务:production:
service: CloudfrontS3
access_key_id: ""
secret_access_key: ""
region: ""
bucket: ""