8

我有一个关于 Heroku 的项目。这个项目允许我更新一个 JSON 文件。如果通过项目的 Web 界面更新 Heroku 上的某些内容,我会看到更新。我可以关闭浏览器,再次打开它,更新仍然存在。

现在,我想向这个项目推一些东西。如果这样做,JSON 文件将被覆盖。因此,我首先从 heroku 获取当前项目状态。Heroku 的提示说一切都是最新的,这是不正确的,因为我更改了 JSON 文件。

使用heroku run ls static/json/显示更改的文件。我需要在推送到 heroku 之前获取此文件,以避免破坏通过 Web 界面完成的更新。

4

3 回答 3

12

我认为这是不可能的,原因之一是:Heroku dyno 拥有自己的临时文件系统,并带有对最新代码的 git checkout。但是,它不能反过来,无法将 dyno 中的文件更改检查到 git repo 中。这就是为什么您会收到“已经是最新的”响应。尝试拉时,因为 heroku git 遥控器与您的本地仓库同步。

您可能应该将您的文件存储在 Amazon 的 S3 或数据库中,甚至将您的数据写入数据库,以便在 heroku 部署之间持久保存。

于 2012-10-06T20:34:29.437 回答
4

您可以运行heroku run bash并备份文件,然后heroku run bash再次部署您的应用程序运行并删除新文件并将其替换为您备份的旧文件。希望能帮助到你

于 2016-07-19T07:10:08.100 回答
0

如果要检查上次部署中的文件,可以运行heroku run bash --app your-app-name.
但是,如果您以编程方式将文件上传到您的应用程序,例如提交包含文件的表单,这些文件将在一段时间后消失,正如herok doc提到的

Heroku 文件系统是短暂的 - 这意味着在 dyno 运行时对文件系统的任何更改只会持续到该 dyno 关闭或重新启动。每个测功机都使用最新部署的文件系统的干净副本启动。这类似于有多少基于容器的系统(例如 Docker)运行。此外,在正常操作下,dynos 每天都会在一个称为“循环”的过程中重新启动。

于 2021-10-21T09:19:31.870 回答