推送项目至Heroku出现No such file or directory报错如何解决
Heroku部署提示找不到config.yml的修复方案
报错核心原因是路径指向错误+对Heroku部署目录结构的认知偏差,你看到的报错路径是/app/venv/config.yml,说明代码在虚拟环境目录下找配置文件,而不是你认为的项目根目录,按以下步骤排查修复即可:
- 修正硬编码的错误路径
Heroku部署时,项目代码会直接放在容器的/app目录下,/app/venv是平台自动生成的Python虚拟环境目录,仅存储安装的依赖包,不会同步你项目内的自定义配置文件。不要在代码里写死/app/venv/config.yml这类绝对路径,改用基于当前运行文件的动态路径拼接,Python示例代码:
import os # 以当前脚本所在目录为基准,拼接配置文件路径,兼容本地/部署环境 CONFIG_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), "config.yml")
- 验证config.yml是否被推送到Heroku端
Heroku基于git推送的内容构建部署,如果你的.gitignore文件中配置了config.yml、*.yml这类忽略规则,本地存在的文件不会被提交到git,自然也不会被推送到Heroku容器。本地仓库执行以下命令验证:
git ls-files | grep config.yml
如果命令无输出,说明文件未被git追踪,需要删除.gitignore里对应的忽略规则,将config.yml加入git提交后重新推送部署。
- 敏感配置优先用环境变量存储
如果config.yml里存的是密钥、令牌这类敏感信息,不建议把文件直接提交到代码仓库,直接在Heroku后台的Config Vars中配置对应键值,代码中优先从环境变量读取配置,这也是Heroku官方推荐的配置方案,安全性更高。
修复后可以执行heroku run bash命令进入部署后的运行容器,执行ls /app查看目录下的实际文件列表,确认配置文件位置后再启动服务验证即可。
内容的提问来源于stack exchange,提问作者Brian Scott
相关产品推荐
相关产品推荐

