Cómo autorizar la descarga de archivos en Rails 4

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.

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.

Su enfoque es correcto, es la única forma de asegurar su área de descarga.
Sobre los problemas de rendimiento, no sé cómo resolver eso con Apache, pero sé cómo resolverlo con NGINX, por lo que probablemente pueda buscar algo similar

Cómo funcionan juntos Rails, Nginx y X-Accel-Redirect – The Data Asylum

Si no quiere ir con su opción de enviar_archivo debido a la velocidad, probablemente podría cargar los archivos en s3 y establecer los permisos en privado, luego, cuando se autoriza la descarga de un usuario, puede copiar el archivo original usando el objeto de copia s3 operación que es atómica para archivos de menos de 5 GB ( http://docs.aws.amazon.com/Amazo …) y otorga a ese archivo permisos de lectura y un breve TTL.

No estoy 100% seguro de las velocidades de copia de objetos, pero vale la pena intentarlo.

Primero un descargo de responsabilidad: en realidad no he realizado descargas de archivos en Rails.

Dicho esto, sin embargo, si por “demasiado lento” quiere decir que interfiere con el manejo de cualquier otra solicitud para llegar a su servidor, entonces me parece que pasar el procesamiento a otro proceso o hilo debería ser el truco. Tal vez podría activar un nuevo hilo o proceso, solo para manejar cada solicitud de descarga de archivos, tal como viene.

More Interesting

¿En qué proveedor de hosting debo construir un sitio web de software pirateado?

Cómo verificar enlaces rotos en la página web usando Selenium Webdriver C #

¿Cuáles son los mejores recursos (libros, clases, otros) que los cofundadores no técnicos pueden usar para ponerse al día sobre cuestiones tecnológicas relacionadas con las nuevas empresas web?

Como desarrollador web front-end, ¿cuál debería ser mi próximo camino de aprendizaje, diseño web o desarrollo web completo?

¿Cuál es el marco PHP que mejor se adapta a AngularJS?

¿Es posible hacer desarrollo web / programación de forma paralela como estudiante universitario?

Cómo hacer que WordPress funcione en sitios independientes (Upwork, Taskrabbit, etc.)

¿Cuál es la diferencia entre programador, desarrollador web, desarrollador de aplicaciones y diseñador de juegos?

Quiero convertirme en desarrollador web. ¿Qué idioma debo aprender?

¿Qué es mejor y más fácil: Java Enterprise de NIIT con DevOps o el curso de desarrollador MEAN Stack?

¿Cuánto tiempo lleva terminar de configurar el SEO en la página?

¿Cuál es la mejor pila tecnológica para crear un blog?

¿Cuál es la mejor empresa de desarrollo de Unity 2D en India?

Si el desarrollo front-end exige conocimiento especializado, ¿por qué las empresas están presionando para desarrollar desarrolladores completos? ¿Sigue siendo recomendable especializarse?

¿Cuál es la mejor manera de realizar un seguimiento de los formatos de solicitud y respuesta JSON en un proyecto de aplicación web grande?