【发布时间】:2016-09-12 18:38:11
【问题描述】:
有没有一种惯用的方式让 Flask 在每次请求时重新加载我的配置文件?这样做的目的是让我可以更改密码或其他与配置相关的项目,而无需关闭并重新启动生产中的服务器。
编辑:app.run(debug=True) 不可接受,因为它会重新启动服务器并且不应在生产中使用。
也许像下面这样的装饰器:
def reload_configuration(func):
@wraps(func)
def _reload_configuration(*args, **kwargs):
#even better, only reload if the file has changed
reload(settings)
app.config.from_object(settings.Config)
return func(*args, **kwargs)
return _reload_configuration
@app.route('/')
@reload_configuration
def home():
return render_template('home.html')
如果相关,这里是我现在加载配置的方式:
我的app/app/__init__.py 文件:
from flask import Flask
from settings import Config
app = Flask(__name__)
app.config.from_object(Config)
# ...
我的app/app/settings.py 文件:
class Config(object):
SQLALCHEMY_TRACK_MODIFICATIONS = False
SECRET_KEY = os.urandom(32)
# ...
try:
from app.local_settings import Config
except ImportError:
pass
【问题讨论】:
-
app.run(debug=True) 不起作用吗?
-
@iScrE4m 不;有两个原因:1)这将重新启动整个服务器,而不仅仅是重新加载配置文件; 2)我在生产中运行它
-
只需在请求前处理程序中调用
app.config.from_object。 -
@dirn 但如果模块没有重新加载,更改将不会传播