部署在Azure App Service的FastAPI Python应用出现内部服务器错误
解决FastAPI部署到Azure App Service后出现"TypeError: FastAPI.call() missing 1 required positional argument: 'send'"的问题
你遇到的错误核心原因是:FastAPI属于ASGI类型Web框架,而Gunicorn默认使用的WSGI Worker无法适配ASGI应用的调用逻辑——WSGI应用的__call__仅接收2个参数,ASGI则需要3个参数(其中就包含报错中缺失的send)。以下是具体解决建议:
1. 修正Gunicorn启动命令,指定ASGI Worker
启动Gunicorn时必须明确指定支持ASGI的Worker类,比如uvicorn.workers.UvicornWorker,示例命令:
gunicorn main:app -k uvicorn.workers.UvicornWorker
其中main是你的FastAPI主文件名(如main.py),app是你定义的FastAPI实例变量(如app = FastAPI())。
2. 配置Azure App Service的启动命令
两种方式任选其一完成配置:
- Azure门户配置:进入目标App Service → 「配置」→「常规设置」,在「启动命令」输入框中填入上述Gunicorn命令。
- Procfile配置:在项目根目录创建
Procfile文件,内容为:
部署时Azure会自动读取该文件的启动指令。web: gunicorn main:app -k uvicorn.workers.UvicornWorker
3. 确保依赖中包含uvicorn
UvicornWorker来自uvicorn包,因此你的requirements.txt必须包含它,示例依赖列表:
fastapi>=0.95.0 uvicorn>=0.21.1 gunicorn>=20.1.0
如果本地环境依赖版本稳定,建议用pip freeze > requirements.txt生成精确的依赖版本,避免部署环境出现版本不兼容问题。
4. 对齐本地与部署的启动方式
本地测试时尽量使用和部署一致的启动命令(即Gunicorn+UvicornWorker),而非直接用uvicorn main:app --reload,这样能提前发现环境差异导致的问题。
内容的提问来源于stack exchange,提问作者Austin
相关产品推荐
相关产品推荐

