Получение url-адреса приложения heroku для изображений вместо s3.amazon aws в Rails API активного хранилища - PullRequest
0 голосов
/ 29 мая 2020

Мне трудно понять URL-адрес изображения активного хранилища в рельсах. Я использую ведро amazon s3 для загрузки изображений в производство с правильной конфигурацией в файле storage.yml.

Когда я запускаю url_for (User.user_image) , он генерирует эту ссылку:

http://my-heroku-app/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBdVFCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--1207b8339755bdc5391cb96548181a27dd9565fc/testing_image.jpg

и когда я запускаю User.user_image.service_url , сгенерированная ссылка будет

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

Мои изображения хранятся в 2 местах? один - Heroku- PostgreSQL, а второй - aws -s3, или это просто aws -s3, где хранятся мои изображения, а активное хранилище каким-то образом связывает его с ссылкой s3.

На самом деле, я хотите http://s3.amazonaws.com в url_for, чтобы вернуть его в ответ API.

Поведение приложения: У меня есть приложение Rails API, в котором изображения / видео сначала поступают на рельсы app из внешнего интерфейса, а оттуда они помещаются в корзину s3.

1 Ответ

0 голосов
/ 29 мая 2020

То, как вы хотели бы сгенерировать URL-адрес, на самом деле

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

...