FastAPI部署Heroku遇Error R10启动超时问题求助
解决FastAPI部署Heroku时的R10超时错误
错误原因
Heroku会为每个Web进程动态分配端口,并通过环境变量$PORT暴露这个端口。你的当前配置里,uvicorn默认绑定8000端口,没有使用Heroku提供的端口,导致服务无法被Heroku的路由系统访问,最终触发Error R10 (Boot timeout)。
解决方案
方法1:修改Procfile(推荐,无需改动代码)
直接在Procfile的uvicorn命令中指定绑定$PORT和监听所有网络接口:
web: uvicorn main:app --workers 4 --host 0.0.0.0 --port $PORT
--host 0.0.0.0:让服务监听所有可用的网络接口,确保Heroku能访问到你的服务(如果只绑定127.0.0.1,只能本地访问)--port $PORT:读取Heroku提供的环境变量端口,替代默认的8000
方法2:在代码中读取端口(适合本地调试与部署逻辑统一的场景)
修改FastAPI代码,导入os模块读取环境变量端口:
import os from fastapi import FastAPI from fastapi.encoders import jsonable_encoder app = FastAPI() @app.get('/') async def root(): return jsonable_encoder({'message': 'hello world'}) if __name__ == "__main__": import uvicorn # 本地运行默认用8000端口,部署到Heroku自动读取$PORT port = int(os.getenv("PORT", 8000)) uvicorn.run(app, host="0.0.0.0", port=port)
对应的Procfile可改为:
web: python main.py
验证修改
重新提交代码到Heroku,部署完成后访问应用域名,即可正常返回{"message": "hello world"}。
内容的提问来源于stack exchange,提问作者balakuz
相关产品推荐
相关产品推荐

