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

Flask Socket-IO部署Heroku遇Application Error求助

问题原因与解决方案

核心问题分析

从Heroku日志的报错ImportError: cannot import name 'ALREADY_HANDLED' from 'eventlet.wsgi'可以明确两个关键问题:

  1. Procfile命令格式错误:你写的web: gunicorn eventlet -w 1 app:app缺少指定worker类型的参数-k,gunicorn无法识别eventlet作为合法参数。
  2. 依赖版本不兼容:gunicorn 20.1.0的geventlet worker尝试导入eventlet 0.33.1中已被移除的ALREADY_HANDLED常量,两者版本不匹配导致冲突。

分步解决方案

1. 修正Procfile命令

将Procfile内容修改为正确格式,明确指定eventlet作为worker类:

web: gunicorn -k eventlet -w 1 app:app

2. 修复依赖版本冲突

选择以下两种方案之一调整requirements.txt:

方案A:升级gunicorn到兼容版本

将gunicorn的版本从20.1.0升级到21.0.0及以上,新版本修复了与eventlet 0.33+的兼容问题:

gunicorn>=21.0.0

方案B:降级eventlet到兼容版本

将eventlet的版本从0.33.1降级到0.32.0,该版本仍保留ALREADY_HANDLED常量:

eventlet==0.32.0

3. 优化依赖(可选)

你同时安装了eventlet和gevent两套异步库,可能引发潜在冲突,建议保留其中一套即可。如果使用eventlet,可移除以下依赖:

gevent==21.12.0
gevent-websocket==0.10.1

4. 重新部署并清理缓存

执行以下命令确保Heroku使用新依赖构建:

# 提交修改后的文件
git add requirements.txt Procfile
git commit -m "Fix SocketIO deployment issues"
git push heroku main

# 清理Heroku构建缓存(解决旧依赖残留问题)
heroku plugins:install heroku-builds
heroku builds:cache:purge

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:36:19