RoR: Установите PaperClip Image модель: путь для корзины S3 правильно

В моем приложении Rails 4 я храню свои изображения на S3, используя PaperClip. Любое мое изображение в S3 bucket выглядит так:

https://mybucketname.s3.amazonaws.com/images/files/000/001/920/original/40a6885fc09c8ed4e1e3745d7f7fb770.jpg

Теперь, чтобы обслуживать изображения через AWS CloudFront CDN, я следую этой статье, предлагая установить :path атрибут в моей модели изображения. Какова будет точная ценность для этого здесь?

has_attached_file :file, styles: { small: '120x50', medium: '350x350' }, :path => "images/files/../../:id/:style/:filename"

В частности, я не уверен, как обработать часть / 000/001 / в URL-адресе изображения выше. Потому что это произвольные папки, которые PaperClip создал при сохранении изображений на S3. Иначе, :id, :style and :filename правильно заменяет их значения во время выполнения.

3 ответа

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

В системе Linux, если вы будете хранить более 32 000 файлов в папке, вы получите сообщение об ошибке. По этой причине скрепка автоматически разбивает ваши файлы на отдельные папки, что и делает 000/001/920 в приведенном выше примере..... это необходимо.

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

Символ, который вы ищете:id_partition.

Так что весь путь будет

images/files/:id_partition/:style/:filename

Я думаю, вам не нужно ничего делать с:path, вам нужно убедиться, что config.action_controller.asset_host указывает на ваше доменное имя CloudFront, а не на S3

Другие вопросы по тегам