Rails 5.2 - URL образа активного хранилища гибридного приложения (Active Storage + S3) не создается на стороне API
Я создал гибридное приложение Rails 5.2 с представлениями и контроллером API. Я разрешаю пользователям загружать файлы благодаря активному хранилищу и S3.
Моя служба активного хранения генерирует URL-адрес изображения S3 в моих представлениях Rails, как показано в журналах:
Сгенерированный URL для файла с ключом: HsBwx3LiGxmSJtDB2pu9nEiJ ( https://%5BDOMAIN_NAME%5D.s3.ca-central-1.amazonaws.com/HsBwx3LiGxmSJtDB2pu9nEiJ?response-content-disposition=....
К сожалению, на стороне API URL-адрес изображения выглядит так:
/ Рельсы /active_storage/ блобовым /...
Идея состоит в том, чтобы использовать этот API в Vue SPA.
модель
Моя модель довольно проста: 1 Модель продукта с has_one_attached :image
,
Serializer
Я использую сериализатор, чтобы представить это изображение, например:
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, получаю URL-адрес этого блога, а не Amazon.
Ценю ваши отзывы о том, что мне здесь не хватает.
Спасибо,
1 ответ
Решил это. В моем сериализаторе вместо:
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