2012-09-14 66 views
45

Estoy usando Python/Django en Heroku (pila de cedro) y tengo un comando de administración que debo escribir para extraer un archivo de un depósito de S3 y procesarlo. No estoy seguro de entender cómo usar el sistema de archivos efímero. ¿Hay solo ciertos directorios que se puedan escribir? Encontré otro artículo que implicaba que solo había ciertas carpetas que podían escribirse (pero no parece aplicarse a la pila de Cedar). Encontré este dev article pero no entra en muchos detalles (nota: entiendo que es solo temporal. Solo necesito descomprimir el archivo y procesar el archivo). ¿Puedo simplemente crear una carpeta en cualquier lugar bajo la raíz de la aplicación? ¿Y cómo lo conseguiría? Parece que probablemente podría simplemente usar $ HOME. Hice un poco de prueba mediante la conexión a través deCómo usar el sistema de archivos efímero de heroku

$ heroku run bash 

y en ejecución:

$ echo #HOME 

devuelve:

/app

y funcionamiento:

$ mkdir $HOME/tmp 

creados una carpeta en th La raíz de la aplicación y se entrega con el mismo usuario y grupo que los otros archivos y carpetas.

Entonces ... ¿me falta algo aquí? ¿Una mejor manera de hacerlo? ¿Hay una variable de entorno del sistema operativo para esto? He ejecutado "env" y no veo uno mejor.

+3

Tenga en cuenta que, cada vez que ejecuta 'heroku run', esto activa un nuevo [dyno] único (https://devcenter.heroku.com/articles/one-off-dynos) en Heroku que * será cargado*. Puede verificar el estado de sus dynos a través de 'heroku ps' para ver si aún se están ejecutando. Al usar 'heroku run bash', el dyno está vinculado a su terminal, es decir, debe detenerse cuando cierre la sesión de su terminal (por ejemplo, con Ctrl + C). Además, el dinamómetro único no tiene acceso a los archivos de otras dinas escritos en tiempo de ejecución, por lo que 'ls', etc. no funcionará para ver qué hay en sus otras dinas (excepto en los archivos de la aplicación). – caw

+5

@MarcoW. ¡Me gustaría resaltar la importancia de tu comentario! Esto es tan obvio que 'heroku run' hace girar un nuevo banco de pruebas. Me tomó un tiempo entender por qué no puedo acceder a través de HTTP los archivos creados a través de 'heroku run" echo test> /app/web/test.html "' ...Resulta que se crearon en un dinamómetro único y nunca se enfrentaron a la web ... –

Respuesta

47

Puede crear un archivo en el directorio '/ tmp', y ese archivo se destruirá una vez que se complete la solicitud. Estoy haciendo esto en Cedar, y no he tenido ningún problema.

+4

de hecho, en cualquier lugar se puede escribir en la pila de cedro -/tmp solo regresó de los días de Bamboo. Sin embargo, perderá cualquier cosa cargada cuando se reinicie/escanee el dinamómetro, etc. –

+1

En caso de que sea útil para otros, tuve que crear un directorio llamado "tmp" en mi directorio raíz. Cuando me encontré por primera vez con esta respuesta, sonó como si tal vez tmp ya existe como parte de Heroku; en mi caso, creé el directorio. – Dan

67

Para comprender realmente el sistema de archivos efímero, necesita comprender qué es un dyno. Puede leer más sobre how dynos work. En pocas palabras, sin embargo, un proceso se ejecuta en Heroku en una máquina virtual con su propio sistema de archivos. Esa máquina virtual puede detenerse por varias razones, llevando consigo el sistema de archivos.

El sistema de archivos subyacente se destruirá cuando se reinicie, reconfigure (por ejemplo, heroku config ...), escalado, etc. Por ejemplo, si tiene dos dindes web, escriba algunos archivos en el sistema de archivos efímero y escale a tres dynos, esos archivos serán destruidos porque su aplicación se está ejecutando en nuevos dynos.

En general, el sistema de archivos efímero funciona igual que cualquier sistema de archivos. Los directorios en los que tiene permiso para escribir, como $HOME y /tmp, pueden escribir archivos en. Cualquier archivo que requiera permanencia debe escribirse en S3 o en una tienda duradera similar. Se prefiere S3 ya que Heroku se ejecuta en AWS y S3 ofrece algunas ventajas de rendimiento. Cualquier archivo que pueda recrearse a voluntad se puede almacenar en la tienda efímera del dyno.

+1

"Se prefiere S3 ya que Heroku funciona con AWS y S3 ofrece algunas ventajas de rendimiento". ¡Es bueno saberlo! ! : D @Naaman – Despertaweb

Cuestiones relacionadas