部署后如何在 Heroku 中维护不在 git repo 中的文件

Posted

技术标签:

【中文标题】部署后如何在 Heroku 中维护不在 git repo 中的文件【英文标题】:How to mantain files in Heroku that are not in git repo after a deploy 【发布时间】:2020-12-06 23:43:54 【问题描述】:

这是场景:我的 Node.js 应用程序在服务器上创建了一个文件,该文件将所有用户数据(不敏感)存储在一个名为 database.json 的文件中。

我目前有两个环境:

我的本地机器,带有database.json, 和我在 Heroku 上的生产环境,有自己的database.json

每次我将应用程序的新版本从我的机器推送到生产环境时,我希望将生产环境的database.json 文件替换为我机器中的文件。为此,我使用.gitignore 忽略了这个文件,所以这个文件在 GitHub 上不是,因为它是在应用程序执行过程中创建的

但是每次我向 Heroku 推送新版本时,Heroku 都会删除它,而不是保留旧的 database.json 文件。看起来 Heroku 用从 Git 下载的文件夹完全覆盖了所有 app 文件夹,而不是与已经存在的文件夹“合并”。

如何在 Heroku 上设置一个文件,用于保存不受git pushes 影响并部署的用户数据?

【问题讨论】:

部署脚本中可能有一些配置在部署时创建文件databse.json 问题是我不想在部署时创建一个新文件,我想保留已经存在但不在 git repo 中的文件 你能检查一下 .gitignore 文件并确保该文件在其中列出 【参考方案1】:

如何在 Heroku 上设置一个文件,用于保存不受git pushes 影响并部署的用户数据?

你不能。

此外,这不仅仅是部署:您的文件在其他时间也会丢失。

您的文件没有被 Git 覆盖; Heroku 的filesystem is ephemeral。任何对它所做的更改都将在测功机重新启动时丢失。无论您是否部署,此happens frequently(每天至少一次)。

您需要更改持久化数据的方式。我建议使用real client-server database,但您也可以将文件保存在third-party object storage using something like Amazon S3 或Azure Blob Storage。

【讨论】:

以上是关于部署后如何在 Heroku 中维护不在 git repo 中的文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Ruby on Rails 中使用 Heroku

如何仅将 git 存储库的子目录部署/推送到 Heroku?

在 Heroku 上每次部署后避免 npm refresh

为啥 tsc 不在 Heroku 中运行?

在没有git的情况下部署NodeJS应用程序

从同一个 git repo 部署两个单独的 heroku 应用程序