bigywater.tech
Flask · 186

生产环境 DEBUG=False

「生产环境一定要关 DEBUG」大家都知道,但具体关掉了什么?这篇用真实的服务把几种启动方式下同一个异常的响应并排对比(只验证响应里有什么,以及如何防止误开;不演示任何利用方式)。环境变量注入见第 184 篇,密钥轮换见第 187 篇。

15628 字节
flask run --debug 的 500 页面(含 Traceback 与源码行)
265 字节
生产方式下的通用 500 页
master 退出
APP_ENV=production 且 DEBUG 开时,启动守卫让 gunicorn 起不来

不同启动方式

实测 · 本机执行输出
启动方式                             状态     响应字节 含 Traceback 含源码行 1 / 0    含文件路径      app 状态
gunicorn,DEBUG 关(默认)            500      265 False       False         False      debug=False propagate=None auto_reload=None level=30
gunicorn + FLASK_DEBUG=1        500      141 False       False         False      debug=True propagate=None auto_reload=None level=10
flask run(默认,无 --debug)         500      265 False       False         False      debug=False propagate=None auto_reload=None level=30
flask run --debug               500    15628 True        True          True       debug=True propagate=None auto_reload=None level=10

上一篇:多进程日志重复问题;下一篇:Secret Key 轮换。

调试器的风险见第 132 篇;这一篇只对比响应内容与防误开。

性能

实测 · 本机执行输出
  DEBUG off   :每个请求 94 µs(TEMPLATES_AUTO_RELOAD=None,jinja_env.auto_reload=False)
  DEBUG debug :每个请求 100 µs(TEMPLATES_AUTO_RELOAD=None,jinja_env.auto_reload=True)

启动守卫

实测 · 本机执行输出
  APP_ENV=production,DEBUG 关          → HTTP 200(master 还在运行:True)
  APP_ENV=production + FLASK_DEBUG=1  → 请求失败:ConnectionRefusedError(master 还在运行:False);日志: "production" and app.debug: raise RuntimeError("refusing to start: DEBUG is on in production") | RuntimeError: refusing to start: DEBUG is on in production | refusing to start: DEBUG is on in production

分步演示

生产环境 DEBUG=False
本步的对象

    本文用到的工具与边界

    • 本机 macOS 27 arm64 / Python 3.14.7 / Flask 3.1.3 / Werkzeug 3.1.9 / Jinja2 3.1.6 / SQLAlchemy 2.1.1 / gunicorn 26.2.0(都装在自己的虚拟环境里);大多数实验用 Flask 的 test_client(直接调用 WSGI 应用,不经过网络),需要真实 HTTP 时另起 gunicorn 或开发服务器(端口 9600 以上,本机 127.0.0.1);计时用 time.perf_counter,数字每次运行会有小幅抖动。gunicorn、flask run、flask run --debug
    • 没有验证:调试器的 PIN 机制与实际可被利用的条件(本篇不演示)、use_reloader 的细节、Docker/K8s 环境里 FLASK_DEBUG 的传入路径、DEBUG 对 Flask 扩展(如 Flask-DebugToolbar)的影响
    京ICP备2026067502号-1京公网安备11010502063487号