当前位置: 首页 > 面试题库 >

如何在每一个Flask请求上重新加载配置文件?

东方栋
2023-03-14
问题内容

是否有一种惯用的方式让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

问题答案:

在应用程序开始处理请求之后,您将无法安全/正确地重新加载配置。配置 只能
在应用程序安装过程中读取。主要原因是生产服务器将使用多个进程运行(甚至分布在多个服务器上),并且处理配置更改请求的工作人员无权访问其他工作人员以通知他们进行更改。另外,某些配置并非旨在重新加载,因此即使您可以通知所有其他工作程序并让他们正确地重新加载,它也可能没有任何作用。

生产型WSGI服务器可以正常重载,即它们不会杀死正在运行的工作人员,直到他们完成响应,因此停机时间实际上不是问题。如果是(实际上不是),那么您的规模如此之大,以至于超出了此答案的范围。

优雅地重新加载:

  • 独角兽
  • uWSGI
  • mod_wsgi

如果您需要使用可以动态更新的配置,则必须编写所有期望使用的代码。您可以使用before_request处理程序来加载每个请求的配置。但是,请记住,您未编写的任何使用config的内容都可能不会更改配置。



 类似资料:
  • 本文向大家介绍nginx 重新加载NGINX配置文件,包括了nginx 重新加载NGINX配置文件的使用技巧和注意事项,需要的朋友参考一下 示例 以root用户身份: Ubuntu 14.04示例 Ubuntu 16.04示例 重新加载之前,最好检查config是否存在语法错误: 要么            

  • 问题内容: Ajax请求后如何刷新或重新加载div?我有此代码: 我需要重新加载或刷新标题div。 问题答案: 您可以这样加载div.div之前请注意空格

  • 当我修改文件时,它会在启动后加载配置文件,否则不会重新加载文件。我的IDE是。 我的问题:

  • 问题内容: 无论我们是否检查会话变量,会话超时都会在每个请求上重置吗?还是我们应该使用至少一个会话变量? Ajax请求是否导致重置会话超时?像,… 谢谢 编辑1) 会导致重置会话超时吗? 问题答案: 是的,它确实。是否实际使用都没关系。 但是,如果 仅 使用ajax调用,则可能会遇到一些问题。 (虽然我还没有遇到过它自己,在这里的解释)

  • 我正在创建一个不使用数据库的服务。 我将所有的请求数据存储在文件系统中。 我正在使用spring Boot开发服务。

  • 我目前正在维护相当大Javawebapp,我需要让它也在Weblogic服务器12.2.1.3.0上运行。该应用程序在JBoss 7、Wildfly 13和Webphere上运行正常。 我能够将应用程序部署到Weblogic,启动它(没有任何错误)并登录。应用程序为3个PAHT(“/”、“/我的应用程序”、“/我的应用程序/主页”)创建3个JSESSIONID cookie。但是,路径“/”的JS