Rails 5.2 - 混合应用程序(活动存储 + S3)活动存储映像 url 未在 API 端生成

Rails 5.2 - Hybrid app (Active Storage + S3) active storage image url not generated on API side

我创建了一个带有视图和 API 控制器的混合 Rails 5.2 应用程序。由于活动存储和 S3,我允许用户上传文件。

我的活动存储服务确实在我的 Rails 视图中生成了 S3 映像 URL,如日志中所示:

Generated URL for file at key: HsBwx3LiGxmSJtDB2pu9nEiJ (https://[DOMAIN_NAME].s3.ca-central-1.amazonaws.com/HsBwx3LiGxmSJtDB2pu9nEiJ?response-content-disposition=....

不幸的是,在 API 一侧,图像 URL 看起来像这样:

/rails/active_storage/blobs/...

我们的想法是在 Vue SPA 中使用这个 API。

型号

我的模型非常简单:1 产品 模型 has_one_attached :image.

序列化器

我正在使用序列化程序来呈现该图像,例如:

include Rails.application.routes.url_helpers

...

def image
    rails_blob_path(object.image, only_path: true) if object.image.attached?  
end

API 控制器

在我的 API 控制器中,我渲染为 json 我的 产品 例如:

def index
  @products = Product.all
  render json: @products, each_serializer: ::ProductSerializer, status: :ok
end

配置

我在 Heroku 上托管,所有环境。变种。被设置。 我的生产设置看起来不错:

config.active_storage.service = :amazon

在 Postman 和我的 Vue 应用程序中进行测试,仍然收到 rails 博客 URL 而不是亚马逊的。

感谢您对我在这里缺少的内容的反馈。

谢谢,

解决了。在我的序列化程序中,而不是:

def image
  rails_blob_path(object.image, only_path: true) if object.image.attached?  
end

我正在使用 Active Storage service_url 方法,例如:

def image
  object.image.service_url if object.image.attached?
end