部署应用到Heroku时Asset文件丢失、Assets文件夹不存在如何解决
Heroku部署Assets文件夹丢失排查及解决方案
排查步骤
- 检查
.gitignore配置:确认Assets/、*/Assets这类规则是否被加入忽略列表,Heroku仅部署git提交的内容,被忽略的文件不会同步到部署环境 - 检查构建脚本配置:查看对应技术栈的构建配置(如Node项目的
package.json、Python Django项目的settings.py),确认是否没有将Assets文件夹加入构建产物的复制规则,多数框架构建时仅会处理指定目录的静态资源 - 查看Heroku构建日志:本地运行
heroku logs --tail查看完整构建流程,确认是否存在Assets文件夹复制权限报错、路径不存在导致跳过的异常日志 - 检查静态资源托管规则:确认服务端配置的静态资源托管根目录是否包含Assets文件夹,若仅配置了
public、dist等目录为资源根目录,不在目录内的Assets文件访问时会显示不存在
解决方法
- 若为
.gitignore忽略导致:删除.gitignore中对应Assets文件夹的忽略规则,将该文件夹提交到git仓库后重新部署即可 - 若为构建时未同步导致:在构建脚本中添加Assets文件夹复制逻辑,比如Node项目可在
package.json的build命令中追加cp -r Assets dist/,也可以直接修改框架的静态资源扫描配置,将Assets目录加入资源处理列表 - 若为托管路径配置错误:修改服务端的静态资源托管规则,比如Express项目添加配置
app.use('/Assets', express.static(path.join(__dirname, 'Assets'))),确保访问路径和部署后的实际文件路径匹配 - 若Assets为运行时动态生成的文件:Heroku采用临时文件系统,dyno重启、重新部署都会清空所有运行时生成的文件,这类动态资源需要存储到AWS S3、Cloudinary等第三方静态存储服务,不可存储在Heroku本地文件系统
- 部署前可先在本地执行生产构建命令(如Node项目的
npm run build),检查本地构建后的产物目录是否包含Assets文件夹,确认配置无误后再推送到Heroku部署
内容的提问来源于stack exchange,提问作者Rohannair183
相关产品推荐
相关产品推荐

