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 8000http://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
相关产品推荐
相关产品推荐

