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

部署在Gunicorn的Flask应用模板与静态文件热重载失败问题

解决Gunicorn无法监听Flask模板/静态文件变更的问题

问题描述

  • 将Python Flask应用部署在Kubernetes环境,通过Procfile完成构建与部署
  • 修改Python文件(.py)可正常触发Gunicorn重载,但模板文件(.html)和静态文件(.css)修改后无法触发重载
  • 已确认修改后的文件已同步到容器的/workspace目录,但仅修改静态或模板文件时,Gunicorn不会重启工作线程

项目结构

.
├── Procfile
├── README.md
├── Tiltfile
├── board
│   ├── __init__.py
│   ├── pages.py
│   ├── postgresql.py
│   ├── posts.py
│   ├── schema-postgres.sql
│   ├── static
│   └── templates
├── gunicorn_config.py
├── requirements.txt
├── venv
│   ├── bin
│   ├── include
│   ├── lib
│   └── pyvenv.cfg
└── wsgi.py

当前配置

gunicorn_config.py

workers = 1
loglevel = 'info'
reload = True
reload_extra_file = ['/workspace/board/templates/*.html', '/workspace/board/static/*.css']
errorlog = '-'
accesslog = '-'
threads = 2
worker_class = 'gthread'

wsgi.py

from board import create_app

app = create_app()

if __name__ == '__main__':
    app.run()

Procfile

web: gunicorn -b :8080 wsgi:app --config gunicorn_config.py

解决方案

  • 修正reload_extra_file路径配置:Gunicorn的reload_extra_file不支持通配符(如*.html),需指定具体文件或目录路径。将配置改为监听整个目录,这样能覆盖所有模板和静态文件的变更:

    reload_extra_file = ['/workspace/board/templates', '/workspace/board/static']
    
  • 升级Gunicorn版本:部分旧版本Gunicorn对目录监听的支持存在缺陷,建议升级到20.1.0及以上稳定版,可在requirements.txt中指定:

    gunicorn>=20.1.0
    
  • 验证文件变更事件传递:在容器内手动修改模板文件后,通过kubectl logs <pod-name>查看Gunicorn日志,确认是否出现"Worker reloading due to file change"的日志,同时确保Gunicorn进程对目标目录有读写权限。

  • 开启Flask模板自动重载:若无需重启Gunicorn,仅需刷新模板,可在Flask应用的create_app函数中添加配置:

    app.config['TEMPLATES_AUTO_RELOAD'] = True
    

    该配置会让Flask在每次请求时重新加载模板,适合开发场景。

内容的提问来源于stack exchange,提问作者Nataraj Basappa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:07:29