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

时间:2012-09-14 00:44:52

标签: heroku filesystems

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

进行了一些测试
$ heroku run bash

并且正在运行:

$ echo #HOME

返回:

/应用

并且正在运行:

$ mkdir $HOME/tmp

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

所以...我在这里缺少什么?一个更好的方法吗?这有OS环境变量吗?我跑“env”而且我看不到更好的一个。

2 个答案:

答案 0 :(得分:74)

要真正了解短暂的文件系统,您需要了解dyno是什么。您可以阅读有关how dynos work的更多信息。简而言之,一个进程在具有自己的文件系统的虚拟机中运行在Heroku上。该虚拟机可以出于多种原因停止,将文件系统与其一起使用。

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

通常,短暂的文件系统就像任何文件系统一样。您有权写入的目录,例如$HOME/tmp,您可以将文件写入。任何需要永久性的文件都应该写入S3或类似的持久存储。 S3是首选,因为Heroku在AWS上运行,S3提供了一些性能优势。任何可以随意重新创建的文件都可以存储在dyno的临时商店中。

答案 1 :(得分:51)

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