首页 > 解决方案 > 在 Active storage Rails API 中获取图像的 heroku-app url 而不是 s3.amazonaws

问题描述

我很难理解 rails 中活动存储的图像 url。我正在使用 amazon s3 存储桶在 storage.yml 文件中通过正确配置上传生产中的图像。

当我运行url_for(User.user_image)时,它会生成此链接:

http://my-heroku-app/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBdVFCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--1207b8339755bdc5391cb96548181a27dd9565fc/testing

当我运行User.user_image.service_url时,生成的链接是

https://my-app.s3.amazonaws.com/ySMyXZUWDnQGexvvNwKjZKpb ......

我的图像是否存储在 2 个地方?一个是 Heroku-PostgreSQL,第二个是 aws-s3,或者只是 aws-s3 存储我的图像,并且活动存储以某种方式将其绑定到 s3 链接。

实际上,我希望url_for 中的http://s3.amazonaws.com在 API 响应中返回它。

应用程序行为:我有 Rails API 应用程序,其中图像/视频首先从前端进入 rails 应用程序,然后从那里推送到 s3 存储桶。

标签: ruby-on-railsherokuamazon-s3rails-activestoragerails-api

解决方案


您想要生成网址的方式实际上是

rails_blob_url(User.find({id of user}).user_image)

至于它是如何工作的,activestorage 只保存一个指向文件所在位置的指针,并将在必要时重定向到 S3 存储桶。在 Heroku 上实际上不可能按照其服务的构建方式在本地存储文件,需要某种外部存储容器。

关于链接部分的 Rails 文档:https ://edgeguides.rubyonrails.org/active_storage_overview.html#linking-to-files


推荐阅读