2012-06-28 26 views
11

Mi aplicación bastante básica permite a los usuarios subir avatares.Después de git push heroku, los archivos cargados en Heroku se pierden

La aplicación se implementa a Heroku con

$ git add . 
$ git commit -m "description" 
$ git checkout master 
$ git merge my-cool-new-feature 
$ git push heroku 

El problema es que cada vez que empujo cambios en Heroku, todos los archivos subidos a Heroku se pierden. Pensé, el problema era que las carpetas/archivos estaban bajo el control de versiones, por lo que añade a la carpeta .gitignore

# Ignore User generated files 
/public/system/* 

y quité los archivos del repositorio.

$ git rm -rf --cached public/system 

Pero el problema persiste. ¿Me puede apuntar en la dirección correcta?

Respuesta

26

El motivo es que Heroku limita la forma en que puede almacenar datos en sus servidores. De vuelta en bamboo días de acumulación, storing any data was simply impossible sin el uso de un servicio externo. Desde que introdujeron la pila Cedar, things have changed a little bit, pero aún no es posible almacenar datos persistentes.

Como has descubierto, cada vez que presionas un nuevo cambio en tu aplicación Heroku (o cada vez que la aplicación se apaga y reinicia después de estar inactiva durante x minutos), tu aplicación se recrea y todos los datos almacenados se pierden.

Lo mejor es no utilizar el directorio público/en absoluto, y comenzar a usar un servicio externo como Amazon S3, Rackspace Cloud Files o Spideroack

+1

Gracias por la respuesta. Dado que el contenido de la base de datos permanece, ya he descartado el reinicio. Y no pude encontrar nada sobre eso en Herokus "Getting started" -documents. Uno podría pensar que a los desarrolladores les gustaría esa información en las preguntas frecuentes. ¡Gracias de nuevo! –

+3

Bueno, la base de datos y el acceso a archivos son dos cosas diferentes. Heroku tiene que admitir algún tipo de almacenamiento persistente o sería totalmente inútil que los desarrolladores inicien rápidamente una aplicación funcional, por lo que le dan acceso a una instancia compartida de postgreSQL, pero eso no incluye el acceso al almacenamiento de archivos. – JeanMertz

1

Sus archivos se perderán con cada despliegue. Mi solución preferida es usar Paperclip y un cubo de Amazon. Paperclip almacenará su imagen en el cubo para que pueda ser referenciada a voluntad desde la aplicación.

1

Si su aplicación necesita recibir archivos cargados por usuarios, debe asegurarse de que estas cargas se almacenen en una ubicación central y duradera.

Con el sistema de archivos efímero de Heroku, cualquier información escrita en el sistema de archivos de un dyno se perderá cuando se reinicie el banco de pruebas. En cambio, Heroku recomienda servicios de respaldo. Para el almacenamiento de archivos y medios, Amazon’s Simple Storage Service (S3) es una gran solución.

Es posible que desee leer este arcticle en el sitio web Heroku: Uploading Files to S3 in Ruby with Paperclip

+0

Para obtener más información sobre el uso de AWS S3 en Heroku: [Uso de AWS S3 para almacenar activos estáticos y carga de archivos] (https://devcenter.heroku.com/articles/s3) –