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

How to use heroku's ephemeral filesystem

我在Heroku(Cedar Stack)上使用python/django,我有一个管理命令需要编写,它将从S3桶中提取一个文件并处理它。我不确定我是否了解如何使用临时文件系统。是否只有某些目录是可写的?我发现了另一篇文章,暗示只有某些文件夹是可写的(但是,它似乎不适用于Cedar堆栈)。我找到了这篇dev文章,但它没有详细介绍(注意:我确实理解这只是暂时的。我只需要解压缩文件并处理该文件)。我可以在应用程序根目录下的任何位置创建一个文件夹吗?我该怎么做?好像我可以用美元回家。我通过连接到VIA做了一些测试

1
$ heroku run bash

和运行:

1
$ echo #HOME

返回:

应用程序

和运行:

1
$ mkdir $HOME/tmp

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

所以…我这里有什么不见的吗?更好的方法?是否有此操作系统环境变量?我已经运行了"env",但我看不到更好的版本。


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

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

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


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