我想向 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: ""

10-06 02:49