Lo que he hecho en el pasado es usar PaperClip con Amazon S3 y CloudFront CDN para una entrega más rápida. PaperClip admite el almacenamiento S3 de forma muy sencilla: consulte su documentación para ver las opciones de configuración de almacenamiento S3 .
- Configure una distribución de CloudFront para reenviar solicitudes de imágenes a su bucket de S3 y otras solicitudes de activos estáticos a su aplicación Ruby on Rails (alternativamente, también puede cargarlos en S3, pero eso está fuera del alcance de esta pregunta).
- CNAME un dominio que controlas (como assets.example.com) para que apunte a tu distribución de CloudFront.
- En la configuración de PaperClip, establezca
s3_host_alias: assets.example.com
. Esto hará que las URL generadas en los recursos de imagen guardados utilicen su host de distribución de CloudFront.
- En su configuración de Ruby on Rails, puede hacerlo
config.action_controller.asset_host = http://assets.example.com
. Las URL de activos de Ruby on Rails también usarán su distribución de CloudFront, para el almacenamiento en caché / entrega más rápida.
Eso es bastante incompleto, pero es de esperar que te señale en la dirección de algunos recursos útiles. Por supuesto, esa es solo una solución, pero es una que me ha funcionado en una situación en la que estaba lidiando con cientos de miles de archivos adjuntos de imágenes en la base de datos.
(Como un posible paso avanzado que puede no ser necesario o útil para su caso, también puede configurar múltiples CNAME para su distribución de CloudFront, como assets0.example.com
y assets1.example.com
. Ambos clips s3_host_alias
y action_controller.asset_host
luego puede tomar lambdas que le permitirán determinar de manera determinista (según activo) genera URL que usan diferentes hosts, para una mejor paralelización si está descargando un montón de ellos en la misma página, ya que los navegadores limitarán las conexiones simultáneas máximas al mismo host).