Как я могу получить доступ к URL-адресу вложения ActiveStorage на S3? - PullRequest
0 голосов
/ 05 ноября 2018

Я переместил скрепку формы в ActiveStorage, и я изо всех сил борюсь с URL-адресами. Я использовал service_url, но не работал для меня, потому что каждый раз, когда вы вызываете эту функцию, она возвращает другой URL.

Я пытаюсь использовать Rails.application.routes.url_helpers.rails_blob_path. Локально это работает. Мне просто нужно получить доступ к http://localhost:3000/rails/active_storage/disk/<etc>, где rails/active_storage/disk/<etc> было дано мне из вызова метода.

Но как я могу получить доступ к этому с моего Amazon S3? Я включил статический хостинг веб-сайтов, но если я нажму http://my-production-bucket.s3-website.sa-east-1.amazonaws.com/rails/active_storage/blobs/<etc>, я получу ошибку. Я поражаю не ту конечную точку / неправильный хост? Что еще мне нужно сделать, чтобы получить уникальный (не динамический) URL, есть ли еще один простой способ?

My storage.yml:

amazon:
  service: S3
  access_key_id: <%= ENV['AWS_KEY'] %>
  secret_access_key: <%= ENV['AWS_SECRET'] %>
  region: 'sa-east-1'
  bucket: 'production-bucket'

test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

production.rb:

config.active_storage.service = :amazon

1 Ответ

0 голосов
/ 05 ноября 2018

Проверьте документы для service_url https://api.rubyonrails.org/v5.2.0/classes/ActiveStorage/Variant.html#method-i-service_url

Возвращает URL варианта на сервисе. Этот URL предназначен для кратковременного использования в целях безопасности и не используется напрямую пользователями. Вместо этого service_url должен быть доступен только как перенаправление со стабильного, возможно, аутентифицированного URL. Скрытие service_url за перенаправлением также дает вам возможность менять службы без обновления всех URL-адресов. И это позволяет кэшировать постоянные URL-адреса, перенаправляющие на service_url в представлении.

Используйте url_for (вариант) (или подразумеваемую форму, такую ​​как + link_to вариант + или + redirect_to вариант +), чтобы получить стабильный URL-адрес для варианта, который указывает на ActiveStorage :: VariantsController, который, в свою очередь, будет использовать этот метод service_call для своего перенаправление.

Рекомендуется реализовать какое-либо действие прокси в вашем приложении. Вы даете фиксированный URL для этого действия, а затем перенаправляете запрос на текущий service_url.

...