3

我的 nginx 配置:

location / {
    include uwsgi_params;
    uwsgi_param UWSGI_PYHOME /usr;
    uwsgi_pass unix:/var/run/uwsgi-python/uwsgi/socket;
    uwsgi_param UWSGI_CHDIR /var/www/my_site;
    uwsgi_param UWSGI_SCRIPT my_site:app;
    uwsgi_param SERVER_NAME my_site;
    uwsgi_param UWSGI_SETENV DEPLOY_VERSION=Development;
}

我的 uwsgi 段:

/usr/local/bin/uwsgi --master --processes 2 --logdate --chmod-socket=666 --uid www --gid www --limit-as 512 --harakiri 60 --max-requests 1000 --no-orphans —-reload-os-env --daemonize /var/log/uwsgi-python/uwsgi.log --pidfile /var/run/uwsgi-python/uwsgi/pid --socket /var/run/uwsgi-python/uwsgi/socket --xmlconfig /etc/uwsgi-python/apps-enabled/uwsgi.xml

uwsgi xml:

<uwsgi>
<master/>
<vhost/>
<memory-report/>
<no-site/>
</uwsgi>

在我的烧瓶应用中

print os.environ.get('DEPLOY_VERSION', 'NONE')  #pring NONE

我怎样才能得到 env_vars?

也许我无法在 <vhost/><no-site/> 模式下通过 UWSGI_SETENV 获取 env_vars 设置?

顺便说一句:您如何在一台没有虚拟环境的机器上部署应用程序的多版本(开发/测试版/发布)?

4

2 回答 2

3

代替:

uwsgi_param UWSGI_SETENV DEPLOY_VERSION=开发;

您可以将其设置为 nginx 中的每个请求变量:uwsgi_param DEPLOY_VERSION 'Development';

然后在 Flask 中,通过 request.environ 访问变量:request.environ['DEPLOY_VERSION']

(我遇到了类似的问题,并在 uwsgi 邮件列表中指出了上述解决方案)

于 2012-08-01T12:14:50.727 回答
3

我在为 django Mezzanine CMS 部署定义环境配置时遇到了类似的问题。

由于 DEPLOY_VERSION 似乎针对的是底层应用程序而不是 uWSGI 服务,因此我认为将其放置在 uWSGI 配置文件而不是 Nginx 配置文件的正确位置。

尝试将 .xml 文件更改为:

<uwsgi>
<master/>
<vhost/>
<memory-report/>
<env>DEPLOY_VERSION=Development</env> <!-- this -->
<no-site/>
</uwsgi>
于 2013-07-14T14:35:30.673 回答