отключить контрольную сумму рельсы активное хранилище скрепка миграция aws s3 - PullRequest
0 голосов
/ 26 сентября 2018

Есть ли способ отключить контрольную сумму при активной памяти?Я перемещаюсь из скрепки в активное хранилище, используя хранилище amazon s3.Невозможно получить код шифрования контрольной суммы md5 без связи с корзиной, что занимает слишком много времени для переноса миллионов вложений в нашу производственную базу данных.Столбец контрольной суммы имеет ограничение null: false, и удаление этого вызывает ошибки при переносе и загрузке файла, которые кажутся неизбежными.Я чувствую, что здесь что-то не хватает, есть ли способ избежать использования столбца контрольной суммы?

1 Ответ

0 голосов
/ 15 ноября 2018

Для некоторых типов объектов S3, как описано ниже, Etag является контрольной суммой MD5 файла.

"Объекты, созданные с помощью объекта PUT, объекта POST или операции копирования или через Консоль управления AWS и зашифрованные с помощью SSE-S3 или открытого текста, имеют ETag, которые представляют собой дайджест MD5 своихданные объекта. Объекты, созданные с помощью объекта PUT, объекта POST или операции копирования или через Консоль управления AWS и зашифрованные с помощью SSE-C или SSE-KMS, имеют теги ETag, которые не являются дайджестом MD5 своих данных объекта.объект создается с помощью операции Multipart Upload или Part Copy, ETag не является дайджестом MD5, независимо от метода шифрования "

ref: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonResponseHeaders.html

Есливаш вариант использования соответствует приведенному выше, вы сможете использовать его вместо загрузки и переваривания всего файла.

Мой код для этого выглядит так:

key = "#{id}/#{filename}"
resp = @s3client.head_object({bucket: @bucket, key: key})
checksum_base64 = [[resp.etag].pack("H*")].pack("m0")

Для повышения производительности выможно использовать API client#list_objects для получения ObjectSummary записей оптом для всего вашего сегмента или подмножества и использовать их для поиска Etag / контрольной суммы.

Я не полностью протестировал этот eс ActiveSupport. (Как правило, это не очень хорошая замена для Paperclip прямо сейчас. В частности, отсутствие поддержки нескольких ведер для нас в данный момент немного ограничивает показ) .

...