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

部署Quart应用至Heroku时遇TypeError错误求助

解决Quart部署Heroku时的TypeError问题

你遇到的这个错误核心原因是Quart是ASGI异步框架,而Gunicorn默认使用的同步worker(sync)是为传统WSGI应用(比如Flask)设计的,两者的调用签名完全不匹配:

  • WSGI应用的__call__方法接收2个参数:environ和start_response
  • ASGI应用的__call__方法需要3个参数:scope、receive、send

Gunicorn默认的worker会把Quart的ASGI应用当成WSGI来调用,就会出现你看到的TypeError: __call__() takes 1 positional argument but 3 were(本质是调用签名不兼容导致的参数数量不匹配)。

下面是两种可行的解决方案:

方案一:用Gunicorn搭配ASGI兼容的Worker

这个方案保留Gunicorn作为进程管理器,同时使用支持ASGI的worker来运行Quart:

  1. 首先在你的requirements.txt中添加uvicorn(Quart官方推荐的ASGI服务器):
quart>=0.18.0
gunicorn>=20.1.0
uvicorn>=0.20.0
  1. 修改你的Procfile,指定使用uvicorn.workers.UvicornWorker:
web: gunicorn main_loop:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:$PORT

这里的-w 4是指定启动4个worker进程,你可以根据Heroku的dyno配置调整这个数字。

方案二:直接用Uvicorn启动应用

如果不需要Gunicorn的进程管理能力,也可以直接用Uvicorn作为服务器:

  1. 确保requirements.txt包含uvicorn(同上)
  2. 修改Procfile为:
web: uvicorn main_loop:app --host 0.0.0.0 --port $PORT

另外补充一点:你本地用的app.run()是Quart自带的开发服务器,只适合本地调试,生产环境一定要用标准的ASGI服务器(比如Uvicorn)来部署,避免出现兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:46:34