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
Другие вопросы по тегам