Удалите старые варианты с помощью Rails ActiveStorage - PullRequest
0 голосов
/ 03 марта 2019

У меня есть что-то вроде приложения для хранения фотографий (Rails 5.2), которое использует ActiveStorage для хранения реальных фотографий.Все хорошо, я создаю водяные знаки с водяными знаками для своих пользователей, чтобы они рассматривались как варианты (оригиналы не являются общедоступными, и мне действительно нужно несколько вариантов для каждого изображения).

Что если мне придется изменить способ генерации таких вариантов?Хранилище S3 недешево (количество изображений исчисляется десятками тысяч), а ActiveStorage вообще не отслеживает варианты - они определяются только хэшем того, как именно я их сгенерировал.Если я изменю хэш варианта (скажем, изменим размер миниатюры), новые будут сделаны из c, но в хранилище останется множество старых больших двоичных объектов.

Эта же проблема также описана здесь , но нет решения.

Что вы делаете со старыми вариантами?Я хочу, чтобы хранилище вариантов работало как кеш, особенно если мои пользователи обычно не смотрят старые изображения.Если вариант старше данного возраста, я хочу просто удалить его, но у меня нет способа сделать это.Или я?

  • Я мог бы посмотреть на настоящие большие двоичные объекты в хранилище - но нет никакой разницы и метаданных.В S3 все эти файлы выглядят одинаково, ключ - это просто хэш того, как это было сделано, и нет соответствующих метаданных.

  • Жесткое кодирование всех предыдущих вариантов генерацииХэши для повторного запуска на всех предыдущих изображениях не должны быть подходящими.

  • Возможно, я мог бы исправить что-то в ActiveStorage (Variation возможно?), чтобы добавить метаданные (указать, какие двоичные объектыварианты и какие оригиналы)?Тогда у меня могли бы быть внутренние рабочие места, чтобы удалить старые варианты.Может ли это на самом деле работать?Как мне сделать это совместимым с будущими версиями ActiveStorage?

  • Должен ли я отслеживать варианты самостоятельно?Почему тогда это не вариант в ActiveStorage?Очевидно, что для этого также потребуются изменения в классах ActiveStorage.

  • Могу ли я хранить варианты в другом хранилище (скажем, в другой корзине S3)?Это также решило бы проблему, так как я тогда знал бы, какие капли являются вариантами и могут легко удалить старые.

Что вы, люди, делаете со старыми ненужными вариантами?

1 Ответ

0 голосов
/ 23 апреля 2019

У меня было время покопаться в ActiveStorage.Оказывается, варианты хранятся с префиксом variants/, что значительно упрощает их поиск.:) Жаль, что это нигде не задокументировано.

Если у меня есть Pic, что has_one_attached :image, я могу легко удалить все его варианты: pic.image.service.delete_prefixed("variants/#{pic.image.key}").Затем мне придется вызывать .processed для вариантов по запросу, чтобы убедиться, что они воссозданы.

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

...