Що я робив у минулому, це використання 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-адреси, які використовують різні хости, для кращої паралелізації, якщо ви завантажуєте купу їх на одній сторінці, оскільки браузери обмежуватимуть максимальне одночасне з'єднання з тим самим хостом.)