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

Dav*_*d S 55 filesystems heroku

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

$ heroku run bash
Run Code Online (Sandbox Code Playgroud)

和运行:

$ echo #HOME
Run Code Online (Sandbox Code Playgroud)

收益:

/应用

和运行:

$ mkdir $HOME/tmp
Run Code Online (Sandbox Code Playgroud)

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

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

Naa*_*old 74

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

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

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


Aus*_*cus 52

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

  • 实际上,雪松堆上的任何地方都是可写的 - /tmp只是从Bamboo时代开始.当dyno重新启动/缩放等时,您将丢失上传的任何内容. (4认同)
  • 如果它对其他人有用 - 我必须在我的根目录中创建一个名为"tmp"的目录.当我第一次看到这个答案时,听起来似乎tmp已经作为Heroku的一部分存在 - 在我的例子中我创建了目录. (2认同)