Heroku部署自动删除服务器文件?

Posted

技术标签:

【中文标题】Heroku部署自动删除服务器文件?【英文标题】:Heroku deploy deletes server files automatically? 【发布时间】:2012-12-11 12:04:20 【问题描述】:

我是HEROKU APPS 的新手。

在我的 heroku 应用程序中,我遇到了问题。那就是我正在使用 php 脚本在服务器上保存数据。

例子:

<?PHP

$file = "example.txt";

$data = "Something...";

file_put_contents($file,$data);

?>

这个PHP脚本运行成功,完美保存数据。

但是,当我将我的APP部署到HEROKU进行更新时->在此过程中example.txt文件被自动删除。

【问题讨论】:

您没有提出问题,但您已经发表了声明。接受你所经历的,因为没有什么可以解决的。这是预期的行为,Heroku 文档对此很清楚。 嗨,听着!感谢您编辑我的问题。 【参考方案1】:

Heroku 文件系统

Heroku 的行为会因您使用的堆栈而有所不同。使用 Bamboo,大部分文件系统是read-only。 Cedar 是ephemeral。

在任何一种情况下,文件系统都不会在dynos 之间共享,并且不应用于存储。为了在服务器端可靠地存储数据,您需要使用数据库(可能将上传的内容存储为 blob),或者作为外部资产在其他主机或服务上。

【讨论】:

【参考方案2】:

Heroku 不会在 git 推送之间为持久文件提供硬盘空间,您必须使用 Amazon S3 之类的东西来存储文件。这就是 Heroku 将他们的文件系统称为 临时文件系统 的原因。在堆栈的早期版本中,它甚至是只读的。

Heroku 有一个教程:Using AWS S3 to Store Static Assets and File Uploads

【讨论】:

Femaref , HEROKU 免费提供 200MB 空间。 @user1882503:是的,对于您的代码。这就是你的 git repro 如果你将新文件提交到你的树中,那很好。如果没有,他们就迷路了。容易。 @hakre 你知道在被删除之前有什么方法可以获取或检索这些文件吗?还是有可能? @Cell 否,这可能就是他们将其称为“短暂”的原因。但也许支持可以帮助您? 哦,是的,我自己做的,只需加入 heroku bash 会话和python manage.py dumpdata &gt; whole.json &amp;&amp; cat whole.json。不确定我刚刚发布的静态资产。【参考方案3】:

请see the docs:

临时文件系统

每个 dyno 都有自己的临时文件系统,以及最近部署的代码的新副本。在 dyno 的生命周期中,它的运行进程可以将文件系统用作临时暂存器,但任何其他 dyno 中的进程都看不到写入的文件,并且在停止或重新启动 dyno 时,任何写入的文件都将被丢弃。

所以你不能用你的 Heroku dyno 节省很多。特别是在您推送新版本后,测功机会重新启动,然后文件系统会重置。

您需要将文件存储到远程位置,然后它们才能在测功机重置后幸存下来。

【讨论】:

以上是关于Heroku部署自动删除服务器文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 Github 环境

从子文件夹自动部署heroku

自动部署批处理

文件上传时,上传到webapps目录下的文件会自动删除

解决 重启tomcat上传的文件被自动删除或未重启过段时间也自动删除(deloy path)

subversion 彻底删除 服务器上的 一个项目,搭建subversion 服务器,并自动部署项目...