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

Flask与uWSGI/Nginx搭配运行故障排查求助

Flask应用启动故障排查与修复

核心问题分析

1. 修改run.py端口未生效

使用flask run启动时,run.py中if __name__ == '__main__':代码块不会执行——这个逻辑仅在直接运行python run.py时触发。flask run通过FLASK_APP环境变量加载应用实例,默认使用端口5000,和run.py里的app.run参数无关。

2. localhost无法访问但局域网IP可以

大概率是IPv6解析冲突:系统默认将localhost解析为IPv6地址::1,但flask run默认只绑定IPv4的127.0.0.1,导致用localhost访问时请求走IPv6,但应用未监听该地址,从而被拒绝。

uWSGI能正常运行,说明应用本身逻辑无问题,故障仅出现在flask开发服务器的启动配置上。


分步解决方案

一、让自定义端口生效

任选一种方式即可:

  • 方式1:启动时指定端口
    flask run -p 8000
    
  • 方式2:设置环境变量
    # Linux/macOS
    export FLASK_RUN_PORT=8000
    flask run
    
    # Windows
    set FLASK_RUN_PORT=8000
    flask run
    
  • 方式3:直接运行run.py
    这种方式会执行你定义的app.run参数,直接绑定127.0.0.1:8000:
    python run.py
    

二、解决localhost访问被拒绝问题

  • 方案1:同时监听IPv4和IPv6
    启动时指定host为::,覆盖默认的127.0.0.1:
    flask run -h :: -p 8000
    
    之后访问http://localhost:8000或http://127.0.0.1:8000都能正常连接。
  • 方案2:允许所有IP访问
    绑定0.0.0.0,同时支持本地和局域网访问:
    flask run -h 0.0.0.0 -p 8000
    

代码中需要修复的潜在问题

1. run.py中重复初始化DB

run.py先从apps导入了db,随后又重新定义db = SQLAlchemy(),会覆盖原有实例导致ORM操作异常,删除该行:

# 删掉这行
db = SQLAlchemy()

2. Config类中多余的Flask实例

config.py的Config类里创建了无关的Flask实例,完全多余,删除以下两行:

# 删掉这两行
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

UPLOAD_FOLDER会通过app.config.from_object(config)自动加载到应用中。

3. 开发环境DEBUG配置错误

config.py中DevelopmentConfig的DEBUG设为False,不符合开发场景,建议改为True:

class DevelopmentConfig(Config):
    DEBUG = True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:01:51