2

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

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

为密钥处的文件生成的 URL:HsBwx3LiGxmSJtDB2pu9nEiJ ( https://[DOMAIN_NAME].s3.ca-central-1.amazonaws.com/HsBwx3LiGxmSJtDB2pu9nEiJ?response-content-disposition= ....

不幸的是,在 API 端,图像 URL 如下所示:

/rails/active_storage/blob/...

这个想法是在 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 而不是亚马逊的。

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

谢谢,

4

1 回答 1

1

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

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

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

def image
  object.image.service_url if object.image.attached?
end
于 2018-10-15T19:08:52.777 回答