You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防止Heroku部署时用户数据JSON文件被git提交意外覆盖

基础前提提醒

Heroku 的 Dyno 采用临时性文件系统设计:所有应用运行时写入本地磁盘的文件,都会在 Dyno 重启、重新部署、平台自动替换实例时被完全清空。你当前将用户提交数据存储在本地 JSON 文件的方案本身就存在固有数据丢失风险,和是否提交覆盖该文件无关。如果是生产环境的业务数据,建议优先替换为 Heroku 托管数据库(如 PostgreSQL、Redis)或第三方对象存储存储,从根本上解决数据丢失问题。

针对 Git 部署不覆盖指定文件的需求,可采用以下稳妥方案:
  • 将数据 JSON 加入 .gitignore
    直接把存储用户数据的 JSON 文件路径写入项目根目录的 .gitignore 配置中,Git 会默认停止追踪该文件的变动,哪怕你本地误修改了该文件,git add、git commit 操作也不会将其纳入提交范围,自然不会在 git push heroku master 时覆盖线上版本。
    示例配置:如果你的数据文件路径为 db/submissions.json,在 .gitignore 中添加一行 db/submissions.json 即可。

  • 使用 Git assume-unchanged 标记锁定文件
    如果你已经将该 JSON 文件的初始版本提交到了 Git 仓库,不想删除仓库中的初始模板,又希望后续本地对该文件的修改不会被 Git 识别提交,可以给文件添加假定不变标记:
    执行命令:git update-index --assume-unchanged <你的JSON文件相对路径>
    后续如果需要更新该文件的初始版本并提交,执行 git update-index --no-assume-unchanged <你的JSON文件相对路径> 即可解除锁定。

  • 配置 Heroku 构建钩子备份恢复数据
    你可以在 Heroku 构建流程中添加后置钩子,部署时先备份线上正在使用的 JSON 文件,部署完成后再自动恢复,完全避免部署操作覆盖线上数据:在项目根目录新建 bin/post_compile 脚本,写入对应备份恢复逻辑即可,Heroku 构建完成后会自动执行该脚本。注意该方案仅能解决部署覆盖问题,无法解决 Dyno 重启导致的本地文件丢失问题。

内容的提问来源于stack exchange,提问作者fullstackplus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:39:00