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

时间:2018-10-13 15:07:47

标签: api amazon-s3 ruby-on-rails-5 rails-activestorage bloburls

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

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

  

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

不幸的是,在API方面,图片网址如下所示:

  

/ 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上托管,所有环境。 vars。被设置。 我的生产设置看起来还不错:

config.active_storage.service = :amazon

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

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

谢谢

1 个答案:

答案 0 :(得分:0)

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

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