Rails 5.2 Active Storage: как определить и убедиться в отсутствии плавающих блобов с прямой загрузкой - PullRequest
1 голос
/ 12 февраля 2020

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

Следуя этому руководству , чтобы интегрировать прямую загрузку с нашими существующими перетаскиванием JS, мы смогли запустить загрузку. Мы берем возвращенный подписанный идентификатор и добавляем его в скрытые поля. Затем при отправке формы мы создаем новую запись и связываем BLOB-объекты Sign_id для создания ассоциации.

Однако, если пользователь не go завершил с отправкой формы, существует ли рекомендуемый способ обеспечить что blob / файлы без модельных ассоциаций очищаются? Сложная часть, кажется, как определить, когда нужно очистить каплю.

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

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

Что касается возраст временного блоба, который необходимо удалить - это также зависит от вашего применения. Очевидно, это должно быть дольше, чем пользователь заполняет форму плюс некоторое поле. Если у вас нет проблем с этими задержками - вы можете установить порог где-то около 24 часов или даже больше и очистить один раз в день, чтобы пользователи наверняка не встретили потерянный файл.

0 голосов
/ 12 февраля 2020

Я прошел тот же опрос и в итоге пришел к выводу, что идеального пути не существует: поскольку это зависит от пользователя отсутствия ввода, следует ожидать, что BLOB-объект может быть очищен только после определенное произвольное время ожидания.

Это может быть, например, cron-подобная работа.

Удаление всех висячих BLOB-объектов может быть выполнено через одну строку, хотя:

ActiveStorage::Blob.unattached.each(&:purge)

(Примечание: я потратил довольно много времени и на вычисления MD5, если это ваш случай, взгляните на статью в блоге , которую я опубликовал о вычислениях MD5 в javascript)

...