如何使用 heroku 的临时文件系统



我在Heroku(Cedar Stack)上使用Python/Django,我需要编写一个管理命令,从S3存储桶中提取一个文件并对其进行处理。我不知道如何使用临时文件系统。是否只有某些目录是可写的?我发现另一篇文章暗示只有某些文件夹是可写的(但是,这似乎不适用于Cedar堆栈)。我找到了这篇开发文章,但没有详细介绍(注意:我知道这只是暂时的。我只需要解压缩文件并处理文件)。我可以在应用程序根目录下的任何位置创建一个文件夹吗?我该怎么得到呢?看起来我可能只需要$HOME。我通过连接到进行了一些测试

$ heroku run bash

和运行:

$ echo #HOME

退货:

/应用

和运行:

$ mkdir $HOME/tmp

在应用程序的根目录中创建一个文件夹,并与其他文件和文件夹使用相同的用户和组。

所以。。。我这里缺了什么?有更好的方法吗?有操作系统环境变量吗?我已经运行了"env",我看不到更好的了。

要真正理解临时文件系统,您需要了解什么是dyno。您可以阅读更多关于dyno如何工作的信息。不过,简而言之,一个进程在Heroku上的一个虚拟机中运行,该虚拟机有自己的文件系统。该虚拟机可能会因多种原因而停止,包括文件系统

当应用程序重新启动、重新配置(例如heroku config ...)、缩放等时,底层文件系统将被销毁。例如,如果您有两个web dynos,将一些文件写入临时文件系统,并缩放到三个dynos,则这些文件将被销毁,因为您的应用程序正在新的dynos上运行。

一般来说,临时文件系统和任何文件系统一样工作。您有权写入的目录,如$HOME/tmp,您可以向其中写入文件。任何需要永久性的文件都应该写入S3或类似的持久存储。S3是首选,因为Heroku在AWS上运行,S3提供了一些性能优势。任何可以随意重新创建的文件都可以存储在dyno的临时存储中。

您可以在'/tmp'目录下创建一个文件,该文件将在请求完成后销毁。我正在Cedar上做这件事,我没有遇到任何问题。