Использование Cloudfront с Active Storage - PullRequest
0 голосов
/ 12 сентября 2018

Я создаю сайт, используя Ruby on Rails. Для загрузки изображений я использую Active Storage и Amazon S3. Здесь все хорошо. Пользователи могут загружать изображения и изображения для просмотра на веб-сайте (изображения являются общедоступными).

Теперь в производстве URL-адрес для изображений: https://example.com/rails/active_storage/representations/1ej21h...

Которые возвращают 302 в ведро S3: https://my -bucket.amazonaws.com / варианты / 9jdh2 ...

Я не большой поклонник:

  • две поездки туда и обратно, чтобы получить изображение;
  • отправка запросов на изображения на сервер Rails;
  • чувство вялости на этих изображениях.

И я бы предпочел использовать Cloudfront для обслуживания этих изображений.

Я искал в Rails Guides, в Google и StackOverflow, но пока не нашел правильного ответа.

Есть ли какое-либо решение для использования Cloudfront с Active Storage?

Edit: Больше контекста: каждое изображение будет загружаться 1000 раз в минуту, по крайней мере, при нормальном движении и из разных стран. Я не хочу подвергать сервер этому давлению (он обрабатывает другие запросы). И я хочу, чтобы пользователи загружали эти изображения как можно быстрее. Следовательно Cloudfront как CDN для этих изображений (общедоступные изображения, не нужно получать подписанный URL).

1 Ответ

0 голосов
/ 12 сентября 2018

Попробуйте это ...

in controllers/active_storage/representations_controller.rb <- создать, если его не существует. Вы должны положить ... </p>

module ActiveStorage
  class RepresentationsController < BaseController
    include ActiveStorage::SetBlob

    def show
      expires_in 1.year, public: true
      variant = @blob.representation(params[:variation_key]).processed
      send_data @blob.service.download(variant.key),
            type: @blob.content_type || DEFAULT_SEND_FILE_TYPE,
            disposition: 'inline'
    end
  end
end

Затем, когда вы вызываете изображение с помощью @model.image.variant(resize: '250x250'), обязательно замените желаемые размеры. Это хак на данный момент. Это должно быть исправлено релизом rails 6, я думаю.

...