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

在Fly.io上通过Gunicorn运行Socket IO时遇到类型错误问题

在Fly.io部署Flask-SocketIO遇greenlet类型转换错误的排查方案

问题场景

部署使用flask_socketio的Flask站点到Fly.io时,为支持双向WebSocket连接,在配置文件的Profile中设置了如下gunicorn启动命令:

web: gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 main:app

Fly.io日志中抛出错误:

TypeError: Cannot convert greenlet.greenlet to gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop

已尝试升级Python到3.10.9并重装gunicorn,问题未解决。当前依赖版本:

gevent==22.10.2
gevent-websocket==0.10.1
greenlet==2.0.1
gunicorn==20.1.0

解决方法

1. 修复greenlet与gevent版本兼容性

该错误核心是greenlet 2.x版本与gevent 22.x版本存在适配冲突,建议降级greenlet到1.x稳定分支:

pip install greenlet==1.1.3 --force-reinstall

更新requirements.txt中的greenlet版本号后重新部署。

2. 更换官方推荐的WebSocket Worker

改用Flask-SocketIO官方支持的gevent Worker实现,替换启动命令为:

web: gunicorn -k gevent.pywsgi.GeventWebSocketWorker -w 1 main:app

同时确保Flask-SocketIO初始化时指定异步模式为gevent:

from flask import Flask
from flask_socketio import SocketIO

app = Flask(__name__)
socketio = SocketIO(app, async_mode='gevent')

3. 强制依赖环境一致性

本地开发环境与Fly.io部署环境的依赖需完全同步,生成精确的依赖锁定文件:

pip freeze > requirements.txt

部署时严格使用该文件安装依赖,避免版本歧义导致的兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:15:21