2012-08-25 32 views
12

La aplicación que actualmente estoy hospedando en Heroku permite a los usuarios enviar fotos. Inicialmente, estaba pensando en almacenar esas fotos en el sistema de archivos, ya que almacenarlas en la base de datos es aparentemente una mala práctica.¿No tiene un sistema de archivos permanente para Heroku?

Sin embargo, parece que no hay un sistema de archivos permanente en Heroku, solo uno efímero. ¿Es esto cierto y, de ser así, cuáles son mis opciones con respecto al almacenamiento de fotos y otros archivos?

Respuesta

18

Es verdad. Heroku le permite crear aplicaciones en la nube, pero esas aplicaciones en la nube no son "permanentes"; son instancias (o "babosas") que pueden replicarse varias veces en el EC2 de Amazon (por eso escalar es tan fácil con Heroku). Si tuviera que insertar una nueva versión de su aplicación, entonces se compilará el slug y se perderán todos los archivos que haya guardado en el sistema de archivos en la instancia anterior.

Su mejor opción (ya sea en Heroku o no) es guardar las fotos enviadas por el usuario en un CDN. Como estás en Heroku y Heroku usa AWS, recomendaría Amazon S3, con la habilitación opcional de CloudFront.

Esto es beneficioso no solo porque evita la "limitación" efímera de Heroku, sino también porque una CDN es mucho más rápida y proporcionará un mejor servicio para su aplicación y experiencia para sus usuarios.

6

Dependiendo de la tecnología que esté utilizando, es probable que su mejor apuesta sea transmitir las cargas a S3 (el servicio de almacenamiento de Amazon). Puede interactuar con S3 con una biblioteca cliente para que sea más fácil publicar y recuperar los archivos. Boto es una biblioteca cliente de ejemplo para Python: existen para todos los idiomas populares.

Otra cosa a tener en cuenta es que los sistemas de archivos Heroku tampoco se comparten. Esto significa que tendrá que colocar el archivo en S3 con la misma aplicación que la que maneja la carga (en lugar de decir, un proceso de trabajo). Si puede, intente cargar la carga en la memoria, nunca la escriba en el disco y la publique directamente en S3. Esto aumentará la velocidad de tus cargas.

Dado que Heroku está alojado en AWS, las transmisiones a S3 ocurren a una velocidad muy alta. Tenga esto en cuenta cuando se está desarrollando localmente.

Cuestiones relacionadas