Що я робив у минулому, це використання PaperClip з Amazon S3 та CloudFront CDN для швидшої доставки. PaperClip дуже красиво підтримує сховище S3: виберіть їх документацію щодо параметрів конфігурації сховища S3 .
- Налаштуйте розподіл CloudFront для переадресації запитів на зображення у ваше відро S3 та інших запитів статичних активів у додаток Ruby on Rails (як альтернативу, ви можете також завантажувати їх у S3, але це не виходить за рамки цього питання).
- CNAME домен, яким ви керуєте (наприклад, asset.example.com), щоб вказати на ваш розповсюдження CloudFront.
- У конфігурації PaperClip встановіть
s3_host_alias: assets.example.com. Це призведе до створених URL-адрес для збережених ресурсів зображення для використання хоста розповсюдження CloudFront.
- У налаштуваннях Ruby on Rails ви можете це зробити
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потім можуть прийняти лямбда, що дозволить вам детерміновано (на основі активу) генеруйте URL-адреси, які використовують різні хости, для кращої паралелізації, якщо ви завантажуєте купу їх на одній сторінці, оскільки браузери обмежуватимуть максимальне одночасне з'єднання з тим самим хостом.)