如何保存Heroku上程序生成的文件?提交时文件被清除问题求助
解决Heroku部署后生成文件被清空的问题
核心原因:Heroku的dyno采用临时文件系统,每次执行
git push heroku main这类部署操作时,会基于你的Git仓库代码重新创建全新的dyno实例——之前程序运行时动态生成的所有本地文件都会被彻底清除,这是Heroku的底层设计机制,并非提交操作主动覆盖了文件。具体解决方法:
- 切换持久化存储方案:不要将生成的文件存在dyno本地,改用Heroku附加组件或第三方服务存储:比如用Heroku Postgres存储结构化数据,用Cloudinary/S3存储图片、文档等静态文件。
- 检查.gitignore配置:如果是本地开发时生成的文件没被提交到Git仓库,确认这类文件是否被
.gitignore规则排除。但注意,即使提交了静态文件,程序运行时动态生成的内容依然无法在dyno中持久化,还是得依赖外部存储。 - 排查部署脚本逻辑:检查
Procfile、package.json(Node.js项目)或其他构建配置文件,确认是否存在部署阶段自动清理文件的脚本(比如postinstall里的删除命令)。
举个实际场景:如果你的程序会生成用户上传的图片,应该在代码里添加逻辑,把图片直接上传到S3,而不是存在本地的/uploads目录;如果生成业务数据,写入数据库而非本地JSON文件。
内容的提问来源于stack exchange,提问作者Egor Mitin
相关产品推荐
相关产品推荐

