Heroku部署报错No application module specified如何修复
报错核心原因
日志抛出的Error: No application module specified本质是启动命令配置缺失:Heroku触发web进程启动时仅执行了无参数的gunicorn命令,未指定需要加载的应用入口,gunicorn无法定位要运行的服务对象直接退出。
本地Windows环境无法运行gunicorn是官方已知的兼容限制,gunicorn仅支持类Unix运行环境,不需要在本地调试gunicorn相关配置。
分步修复方案
- 确认应用入口路径
定位你项目中WebSocket服务实例的定义位置:比如主启动文件为根目录下的main.py,文件内初始化的服务实例变量名为app,则gunicorn需要的应用引用路径为main:app。 - 修正Procfile启动配置
检查项目根目录下的Procfile文件(无文件则新建,注意文件名全小写、无任何后缀),替换原有错误的web进程命令为正确格式:
普通WSGI兼容WebSocket服务的基础写法:
如果你用的是异步WebSocket服务(如FastAPI、Starlette框架实现的服务),需要搭配异步worker,命令修改为:web: gunicorn main:app
注意:将上述命令中的web: gunicorn main:app -k uvicorn.workers.UvicornWorkermain替换为你实际的入口py文件名,app替换为你实际定义的服务实例变量名 - 核对依赖清单
打开根目录下的requirements.txt,确认已写入生产环境需要的依赖:gunicorn==20.1.0 # 若使用uvicorn异步worker则追加 uvicorn==0.18.2 # 其余项目依赖(如websockets、fastapi、flask-sock等)按实际使用版本补充 - 重新触发部署
将修改后的Procfile、requirements.txt提交后推送至Heroku远程仓库,重新触发构建部署即可,所有启动逻辑会在Heroku的Linux运行环境中执行,无需本地Windows环境跑通gunicorn。
常见配置踩坑
- Procfile不能带
.txt等后缀,否则Heroku无法识别自定义启动命令,会回退到默认的无参数gunicorn命令,复现你当前遇到的报错 - 如果入口文件存放在子目录中,比如
app/main.py,引用路径需要对应调整为app.main:app - WebSocket长连接场景需要对应调整worker类型和超时配置,避免连接被进程意外回收
内容的提问来源于stack exchange,提问作者28klotlucas2
相关产品推荐
相关产品推荐

