He visto dos soluciones sostenibles para este problema.
X-SendFile Header
Rails tiene soporte incorporado para descargar el procesamiento de archivos a nginx y Apache. Primero tiene que establecer un valor de configuración para decirle a Rails que envíe un encabezado de regreso a nginx / Apache, luego debe configurar Apache o nginx para manejar las descargas. El siguiente enlace describe las opciones de configuración y también los enlaces a los documentos de configuración del servidor web correspondiente.
- ¿Por qué el comando "Buscar" en los sitios web suele ser un botón y no un enlace?
- ¿Quién está detrás de Dart?
- Cómo colocar automáticamente una imagen verticalmente dentro de su div padre
- ¿Por qué AngularJS tiene llamadas de función sin fin?
- ¿Dónde debo poner este código js en map box studio?
http://guides.rubyonrails.org/as…
Esto permitirá que su aplicación Rails procese más solicitudes porque Apache o nginx manejarán la transmisión de los archivos, lo que ambos hacen muy bien. Todavía escribe `send_file` de la misma manera que lo haría en Rails.
S3 y enlaces que caducan
Otra opción es salir del almacenamiento local de archivos usando algo como Carrierwave y Fog, y luego configurar sus permisos S3 en privado. Fog / Carrierwave puede encargarse de proporcionar enlaces a archivos S3 que tienen caducidad incorporada. Esto es un poco menos seguro, porque si alguien puede obtener el enlace en unos segundos o minutos que es válido, también puede descargarlo. Pero elimina por completo la responsabilidad de descarga de su aplicación, por lo que tendrá que sopesar sus opciones.
http://www.rubydoc.info/gems/car…
Carrierwave tiene esto incorporado como un valor de configuración, pero, por supuesto, debe probarlo a fondo para asegurarse de que los permisos en su depósito S3 sean correctos y que la caducidad esté funcionando completamente antes de implementarla en producción.
En gSchool, cuando enseñamos la carga de archivos, siempre recordamos a los estudiantes que se aseguren de que sus credenciales S3 nunca se registren en Git. Asegúrese de ignorar cualquier archivo que contenga sus credenciales. Si usa variables de entorno en su servidor para almacenarlas (lo cual es increíble) considere la gema bkeepers / dotenv para un desarrollo más fácil.