Кэширование подписанных URI S3 с помощью скрепки и рельсов - PullRequest
1 голос
/ 08 марта 2012

Я создаю истекающие подписанные URI с помощью скрепки на S3. Однако при каждом запросе я генерирую новый URI, который не идеален и заставляет браузер загружать новый набор изображений из S3 при каждом обновлении страницы.

Что я хотел бы сделать, так это кэшировать сгенерированные URI на немного меньшее время, чем они истекают на S3. Кто-нибудь делал что-то подобное раньше и может предложить решение?

Я развертываю на героку, если это предлагает решение (или нет)

1 Ответ

5 голосов
/ 08 марта 2012

Есть простой способ сделать это довольно аккуратно.Метод скрепки expiring_url занимает явное время.Таким образом, мы можем сделать что-то вроде

  def s3_expiry
        Time.zone.now.beginning_of_day.since 25.hours
  end

и когда нам понадобится истекающий URL-адрес

 user.avatar.expiring_url(s3_expiry, :thumb)

Хитрость в том, что срок действия изображения в S3 истек в конце дня + 1 часдля любого URL, созданного до конца дня.Новые URL создаются в полночь каждую ночь.Это предотвращает использование изображений за пределами сайта в течение более 25 часов, что должно быть достаточно для предотвращения безудержной горячей ссылки, но все же достаточно для того, чтобы браузеры могли кэшировать изображения в течение дня

...