Я занимаюсь разработкой на iOS и переключаюсь с PHP- бэкенда на Ruby on Rails. Формат обмена JSON .
Быстрый поиск в Google для «сохранения изображений в Rails» приводит почти к каждому результату, говорящему о сохранении данных изображений в виде больших двоичных объектов в базе данных. Я могу ошибаться, но у меня сложилось впечатление, что сохранение данных изображения в базе данных - это огромная трата времени и места (в отличие от сохранения ссылки на местоположение файла ('/img/subcat/4656.png') ,
В PHP достаточно стандартно получать данные, генерировать имя файла, сохранять этот файл на диск и обновлять базу данных, указав расположение изображения на диске. Это то же самое для Ruby on Rails, или есть какая-то встроенная функциональность образа ActiveRecord, о которой я не знаю?
источник
Ответы:
В прошлом я использовал PaperClip с Amazon S3 и CloudFront CDN для более быстрой доставки. PaperClip прекрасно поддерживает встроенное хранилище S3: см. Их документацию по параметрам конфигурации хранилища S3 .
s3_host_alias: assets.example.com
. Это приведет к тому, что сгенерированные URL-адреса к сохраненным ресурсам изображений будут использоваться вашим хостом распространения CloudFront.config.action_controller.asset_host = http://assets.example.com
. URL-адреса ресурсов Ruby on Rails также будут использовать ваш дистрибутив CloudFront для кэширования / ускорения доставки.Это довольно схематично, но, надеюсь, укажет вам некоторые полезные ресурсы. Конечно, это всего лишь одно решение, но оно помогло мне в ситуации, когда я имел дело с сотнями тысяч вложений изображений в базе данных.
(В качестве возможного продвинутого шага, который может и не понадобиться или не пригодиться для вашего случая, вы также можете настроить несколько CNAME для своего дистрибутива CloudFront, например,
assets0.example.com
иassets1.example.com
. Обе скрепкиs3_host_alias
иaction_controller.asset_host
затем могут принимать лямбды, которые позволят вам детерминистически (на основе asset) генерировать URL-адреса, использующие разные хосты, для лучшего распараллеливания, если вы загружаете их на одной странице, так как браузеры ограничивают максимальное количество одновременных подключений к одному хосту.)источник
Я пробовал несколько драгоценных камней, но теперь я использую FineUploader вместе с PaperClip
FineUploader обрабатывает большую часть графического интерфейса для вас, например, процесс загрузки, перетаскивание и несколько загрузок файлов и так далее. Я использую PaperClip, потому что я хочу хранить изображения на своих серверах, а не на S3.
Что мы обычно делаем, так это ищем стабильное готовое к конфигурированию решение вместо воссоздания материала с нуля. С помощью PaperClip я сохраняю изображения, а с помощью StateMachine я делаю преобразования для изображений и помещаю их в категорию на основе имени файла. У меня был тот же вопрос, что и у вас, и это было мое лучшее рабочее решение, поэтому я делюсь им.
источник