2012-07-01 22 views
3

我的nginx的conf:如何讓env_vars nginx的UWSGI_SETENV在uwsgi

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?

也許我不能得到通過UWSGI_SETENV的env_vars設置在<虛擬主機/ > <沒有現場/ >模式?

btw:如何在沒有虛擬env的一臺機器上部署多版本(開發/測試版/發行版)的應用程序?

回答

3

代替:

uwsgi_param UWSGI_SETENV DEPLOY_VERSION =發展;

你可以將其設置爲nginx的每個請求的變量:uwsgi_param DEPLOY_VERSION 'Development';

然後內瓶,通過request.environ訪問變量:request.environ['DEPLOY_VERSION']

(我有一個類似的問題,並指出到uwsgi郵件列表中的上述解決方案)

+3

確實;你可能*不能*爲nginx的uwsgi設置環境變量;因爲nginx並不實際啓動uwsgi,(uwsgi必須已經運行),所以沒有真正的選項來設置它們。 – SingleNegationElimination

+0

這是一個很好的觀點。 – corford

+0

@TokenMacGuy哦,好點,謝謝! – linnchord

3

我有一個類似的問題,爲django Mezzanine CMS部署定義環境配置。

由於DEPLOY_VERSION似乎是針對底層應用程序而不是uWSGI服務,所以我認爲將它作爲uWSGI配置文件而不是Nginx的正確位置。

嘗試改變將.xml文件:

<uwsgi> 
<master/> 
<vhost/> 
<memory-report/> 
<env>DEPLOY_VERSION=Development</env> <!-- this --> 
<no-site/> 
</uwsgi>