Heroku部署FastAPI(Python)项目出现网络错误,多轮配置后仍无法解决求助
问题排查步骤
1. 优先修正requirements.txt依赖错误
你目前的依赖列表存在多个冗余和冲突项,是大概率的报错来源:
- 移除标准库冗余依赖:
datetime、typing、dataclasses都是Python3.7+内置模块,不需要在requirements.txt中声明,强制安装会触发版本冲突 - 替换错误的依赖包:
- 单独安装的
bson包和MongoDB驱动motor内置的bson模块冲突,直接删除bson这一行 - 你写的
jose是无效依赖,正确的JWT依赖是python-jose[cryptography],把jose替换成这个
- 单独安装的
- 可选优化:删除开发环境依赖
pylint、astroid,生产环境不需要这两个包,减少构建失败概率
修正后的参考requirements.txt内容:
appdirs dnspython email-validator fastapi motor python-jose[cryptography] passlib typing-extensions pydantic starlette uvicorn gunicorn h11 click websockets
2. 统一Procfile配置
你之前试的多个配置里,优先用gunicorn托管uvicorn的写法,这是Heroku部署FastAPI的标准最佳实践,直接固定为下面的写法即可,不要加多余的引号:
web: gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
注意:Procfile没有后缀名,确保你上传的文件名称就是Procfile,不是Procfile.txt,也不要小写开头,Heroku对文件名大小写敏感。
3. 确认runtime.txt的Python版本兼容性
不要用太新的测试版本,也不要用低于3.7的旧版本,优先选Heroku官方支持的稳定版本,比如3.9、3.10,runtime.txt里直接写一行即可,比如:
python-3.10.12
注意版本号前缀必须是python-,不要只写版本号。
4. 本地验证后再部署
部署前先在本地跑一次gunicorn启动命令,确认本地能正常启动,排除代码本身的语法错误、导入错误问题:
gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
如果本地启动失败,先解决本地的代码问题再部署到Heroku。
5. 查看Heroku日志定位具体错误
如果以上操作都做完还是报错,直接在Heroku CLI里跑命令查看实时日志,能看到具体的错误栈:heroku logs --tail
常见的错误还包括:
- 入口文件名称不是main.py,对应修改Procfile里的入口名即可
- 环境变量配置错误,比如数据库连接串没有加白名单,MongoDB Atlas要把Heroku的IP段加入访问白名单,或者直接开允许所有IP访问测试
- 端口绑定错误,不要在代码里硬写端口,完全交给Heroku的PORT环境变量即可
内容的提问来源于stack exchange,提问作者Rishad
相关产品推荐
相关产品推荐

