You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在GCP Vertex AI部署FastAPI应用时遇__call__参数缺失错误

在GCP Vertex AI部署FastAPI应用的错误修复

问题现象

部署FastAPI应用至Vertex AI后,日志抛出如下错误:

INFO: Started server process [1]
INFO: Waiting for application startup.
INFO: ASGI 'lifespan' protocol appears unsupported.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/uvicorn/protocols/http/h11_impl.py", line 408, in run_asgi
result = await app( # type: ignore[func-returns-value]
File "/usr/local/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
return await self.app(scope, receive, send)
File "/usr/local/lib/python3.9/site-packages/uvicorn/middleware/asgi2.py", line 16, in __call__
instance = self.app(scope)
TypeError: __call__() missing 1 required positional argument: 'context'

问题原因

Dockerfile的启动命令错误指定了Mangum的handler作为Uvicorn的启动对象。Mangum是为AWS Lambda适配ASGI应用的工具,而Vertex AI容器部署环境直接支持标准ASGI应用,不需要该适配层。Mangum的调用签名与标准ASGI应用不一致,导致Uvicorn启动时参数缺失。

修复步骤

1. 修改Dockerfile启动命令

将原有启动命令:

CMD ["uvicorn", "app.main:handler", "--host", "0.0.0.0", "--port", "8080"]

替换为:

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]

2. (可选)清理冗余代码

若无需适配AWS Lambda,可从main.py中移除Mangum相关代码:

# 删除以下两行
from mangum import Mangum
handler = Mangum(app)

3. 重新构建部署

执行原构建命令重新生成镜像,再在Vertex AI中重新部署模型:

gcloud builds submit . --tag=<YOUR_REGION>-docker.pkg.dev/<YOUR_PROJECT>/<YOUR_REPOSITORY>/<PROJECT> --machine-type='n1-highcpu-32' --timeout=900s --verbosity=info

额外说明

Vertex AI容器运行环境原生支持FastAPI这类ASGI应用,直接启动FastAPI的app实例即可正常运行。引入Mangum会破坏ASGI协议的兼容性,导致启动时参数不匹配的错误。

内容的提问来源于stack exchange,提问作者AlbertSawZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 07:18:18