我在运行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;
...
我的烧瓶应用程序看起来像:
^{pr2}$但是
那似乎行不通。在
我得到一个:RuntimeError:在请求上下文之外工作
我的nginx被设置为可以有一个开发/生产环境,但是我想说这个“服务器位置”是一个开发环境,我希望Flask使用适当的配置。在
这有点旧,但我想补充一下我们是如何用烧瓶来完成这一点的。其中大部分是改编自http://flask.pocoo.org/docs/config/。在
在我们的配置.py我们定义了多个类(每个环境一个):
然后,在我们的每个应用程序节点中,我们在gunicorn init脚本中设置一个环境变量(对于我们来说,它位于一个supervisor配置中,但不一定非得如此)。在
^{pr2}$然后在初始化期间在flask应用程序中(仅在服务器启动时运行,而不是在请求上下文中运行):
现在应用程序配置['BAR']将是3。在
我们还需要对本地配置文件的支持(例如在开发人员机器上,或者直接从chef部署到机器上的密码,而不是存储在git中)。为此,我们在上面进行了扩展,还基于应用程序配置['LOCAL_CONFIG']参数。在
然后在/etc/本地配置.py在
在我们的应用程序初始化代码中,在上面的代码加载初始应用程序配置对于环境:
此时此刻应用程序配置['BAR']是4。在
这并不完美,因为如果配置中有dict,那么只能覆盖整个dict,而不能覆盖其中的键。但它确实完成了我们所需要的大部分。在
应用程序配置用于整个应用程序,而请求头仅用于一个请求。同一个应用程序通常处理许多请求。因此,您不能根据请求头设置配置。在
当没有请求到达应用程序时,模块级的代码在服务器启动时执行,因此没有当前的请求。这就是“在请求上下文之外工作”消息的含义。在
您要做的(prod vs.dev config)最好是在启动gunicorn服务器的脚本中使用一个环境变量。如果您想同时运行两个gunicorn服务器,最简单的方法就是运行两个gunicorn服务器。在
或者,创建两个应用程序对象,在同一个进程中运行它们,并使用类似于以下内容的WSGI中间件进行分派:http://flask.pocoo.org/docs/patterns/appdispatch/
相关问题 更多 >
编程相关推荐