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

部署在Heroku的Flask应用无法正常运行,代码无可见报错如何解决?

Heroku部署Flask应用无法运行排查及解决方案

核心错误原因

1. app.py存在语法错误

你提供的app.py代码中,两处Python内置特殊变量的书写格式错误,直接导致程序启动时报NameError无法运行:

  • 实例化Flask对象时,正确写法为app = Flask(__name__),你的代码中遗漏了name前后的双下划线,直接写name会触发变量未定义报错
  • 程序入口判断语句的正确写法为if __name__ == "__main__":,你的代码中name和main都没有加双下划线,同样会触发变量未定义错误

2. SocketIO配置不匹配(可选,仅当需要使用SocketIO功能时需修正)

你代码中导入了flask_socketio库但没有完成初始化绑定,且当前Procfile的gunicorn启动配置不支持WebSocket请求:

  • 未初始化SocketIO实例绑定Flask应用
  • 默认gunicorn启动参数不支持WebSocket协议,会导致SocketIO相关功能失效

修复步骤

  1. 修正app.py的语法错误,修改后的代码如下:
from flask import Flask, render_template, url_for, redirect, request, session
from flask_socketio import SocketIO, send
# 修正__name__的双下划线写法
app = Flask(__name__)

# 若需要使用SocketIO功能,添加这行初始化代码,不需要可注释
socketio = SocketIO(app)

@app.route("/")
def login():
    return render_template('index.html')

@app.route("/home")
def home():
    return "welcome to homepage!"

# 修正入口判断的双下划线写法
if __name__ == "__main__":
    # 若使用SocketIO,使用socketio.run启动服务,否则用原app.run即可
    socketio.run(app, debug=False, host="0.0.0.0")
    # 不需要SocketIO时保留以下代码即可
    # app.run(debug=False, host="0.0.0.0")
  1. 若不需要SocketIO相关功能,可删除requirements.txt中Flask-SocketIO、python-socketio、gevent-websocket等多余依赖,减少部署加载项
  2. 若使用SocketIO功能,需将Procfile内容修改为适配WebSocket的启动命令:
web: gunicorn --worker-class geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 app:app
  1. 重新推送修改后的代码到Heroku触发重新部署,即可正常运行

内容的提问来源于stack exchange,提问作者sk.anu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:42:00