gpt4 book ai didi

python - 如何根据 Flask 中的服务器变量选择配置?

转载 作者:太空宇宙 更新时间:2023-11-04 09:13:48 25 4
gpt4 key购买 nike

我正在运行 nginx + gunicorn + flask

我的 nginx 配置如下:

...

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header Stage "development";

proxy_redirect off;

...

我的 flask 应用程序看起来像:

from flask import Flask, request

from werkzeug.contrib.fixers import ProxyFix

app = Flask(__name__)

# configuration settings

if request.headers.get('Stage') == 'production':
app.config.from_object('config.production_config')
else:
app.config.from_object('config.development_config')

@app.route('/')
def index():
return "hello"

app.wsgi_app = ProxyFix(app.wsgi_app)

但是,

这似乎行不通。

我得到一个:RuntimeError:在请求上下文之外工作

我的 nginx 已设置好,因此我可以拥有一个开发/生产环境,但我希望能够说这个“服务器位置”是一个开发环境,我希望 Flask 使用适当的配置。

最佳答案

应用程序配置适用于整个应用程序,而请求 header 仅适用于一个请求。同一个应用程序通常会处理许多请求。因此,您不能根据请求 header 设置配置。

您在模块级别的代码在服务器启动时执行,当时还没有请求到达应用程序,因此没有当前请求。这就是“在请求上下文之外工作”消息的含义。

您尝试做的事情(生产配置与开发配置)最好在启动 gunicorn 服务器的脚本中使用环境变量来完成。如果您同时想要两者,最简单的方法是运行两个 gunicorn 服务器。

或者,创建两个应用程序对象,在同一个进程中运行它们,并使用类似于以下的 WSGI 中间件进行调度:http://flask.pocoo.org/docs/patterns/appdispatch/

关于python - 如何根据 Flask 中的服务器变量选择配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11790332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com