RoR: Установите PaperClip Image модель: путь для корзины S3 правильно
В моем приложении Rails 4 я храню свои изображения на S3, используя PaperClip. Любое мое изображение в S3 bucket выглядит так:
Теперь, чтобы обслуживать изображения через 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