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

我在Heroku上使用了Python / Django(Cedar Stack),我有一个pipe理命令,我需要写一个将S3文件从S3存储区中取出并处理的文件。 我不知道如何使用临时文件系统。 只有某些目录是可写的吗? 我发现另一篇文章暗示只有某些文件夹是可写的(但是,似乎并不适用于Cedar堆栈)。 我发现这个开发文章,但没有详细说明(注意:我明白,这只是暂时的,我只需要解压缩文件并处理文件)。 我可以在应用程序根目录下的任何地方创build一个文件夹吗? 我怎么得到这个? 这似乎我可能只是使用$ HOME。 我通过连接到via做了一些testing

$ heroku run bash 

并运行:

 $ echo #HOME 

收益:

/应用

并运行:

 $ mkdir $HOME/tmp 

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

所以…我在这里错过的任何东西? 一个更好的方法来做到这一点? 有没有一个操作系统的环境variables? 我已经运行了“env”,我没有看到更好的。

您可以在'/ tmp'目录下创build一个文件,该文件将在请求完成后被销毁。 我在雪松这样做,我没有任何问题。

要真正理解短暂的文件系统,你需要了解一个测功机是什么。 你可以阅读更多关于如何工作的dynos 。 简而言之,一个进程在具有自己的文件系统的虚拟机上运行在Heroku上。 那个虚拟机可以停止的原因很多,把文件系统一起带走。

当应用程序重新启动,重新configuration(例如heroku config ... ),缩放等等时,底层文件系统将被销毁。例如,如果您有两个Web dynos,请将一些文件写入临时文件系统,然后扩展为三个dynos,这些文件将被破坏,因为您的应用程序正在运行新的dynos。

一般来说,临时文件系统就像任何文件系统一样工作。 你有权写入的目录,比如$HOME/tmp ,你可以写文件到。 任何需要持久性的文件都应该写入S3或类似的耐用商店。 Heroku在AWS上运行时S3是首选,S3提供了一些性能优势。 任何可以随意重新创build的文件都可以存储在dyno的临时存储中。