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

使用Heroku CLI Git部署NodeJS网站:推送前如何同步本地与服务器文件?

解决Heroku部署覆盖用户上传文件的问题

这个问题我之前帮好几个开发者踩过坑,核心其实是Heroku的文件系统特性在搞怪,先给你搞定眼前的同步需求,再说说长期的正确解决方案,省得以后再头疼~

先救急:推送代码前把服务器上的用户文件同步到本地

因为Heroku每次部署都会完全重置dyno的文件系统,所以你得先把服务器上用户上传的images文件夹拉到本地,再推送新代码:

  • 第一步:进入Heroku服务器的终端,打包用户上传的图片
    heroku run bash -a 你的Heroku应用名字
    # 进入服务器后执行打包命令
    tar -czf images.tar.gz images/
    exit
    
  • 第二步:把打包好的压缩包下载到本地
    heroku ps:copy images.tar.gz -a 你的Heroku应用名字
    
  • 第三步:本地解压压缩包,把服务器上的图片合并到本地images文件夹
    tar -xzf images.tar.gz
    # 解压完就可以把这个压缩包删掉啦
    rm images.tar.gz
    
  • 第四步:确认.gitignore里已经添加了images/,别把用户文件误提交到Git仓库
    打开你的.gitignore文件,确保有这一行:
    images/
    
  • 第五步:正常推送代码到Heroku
    git add .
    git commit -am "你的更新描述"
    git push heroku master
    

更关键的长期方案:别用Heroku本地存用户上传内容

上面的同步方法只是临时救急,因为Heroku的dyno文件系统是临时且易失的:

  • 每次部署(git push)都会彻底清空dyno里的文件,之前用户上传的内容全没了
  • 就算不部署,dyno重启(比如自动扩容、系统维护)后,用户的文件也会丢失

所以正确的做法是把用户上传的图片和内容放到专门的云存储服务:

  • 让你的Node.js应用直接把用户上传的文件传到云存储(比如AWS S3、Cloudinary、Google Cloud Storage)
  • 应用只需要把这些文件的访问URL存在数据库里,不用存文件本身
  • 这样不管你怎么部署Heroku应用,用户的文件都不会丢,也再也不用折腾本地和服务器的文件同步了

这样处理后,以后推送代码就完全不用担心用户内容丢失的问题啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:43:54