Есть простой способ сделать это довольно аккуратно.Метод скрепки 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 часов, что должно быть достаточно для предотвращения безудержной горячей ссылки, но все же достаточно для того, чтобы браузеры могли кэшировать изображения в течение дня