配置Nginx和Gunicorn(Ubuntu机器上的Django应用程序)后未设置环境变量

时间:2015-12-09 14:40:00

标签: python django ubuntu nginx gunicorn

我刚刚使用Nginx(反向代理)为一个Django网络应用程序设置了Gunicorn。该组合似乎按照gunicorn.log正确启动。请注意,我没有使用主管。

但奇怪的是,我的环境变量(在.profile中设置)根本没有被提取! printenv表明它们存在。我尝试过的一些事情是将环境变量放在/etc/default/nginx中并重新启动nginx,etc/environment.profilenginx.confgunicorn.conf等等它只是不起作用!

顺便说一下,在安装和配置nginx之前,它完全可以正常工作,即当我只是在运行时:gunicorn --bind 0.0.0.0:8080 --env DJANGO_SETTINGS_MODULE=myproject.settings myproject.wsgi:application

现在看来nginx:

  

删除从其父进程继承的所有环境变量   除了TZ变量

来源:http://nginx.org/en/docs/ngx_core_module.html#env这可能是我为什么没有尝试接近工作的原因吗?但是如果是这样的话,我想这些添加到nginx.conf的变量应该已经被选中了。然而,使用echo $envvar在命令行上产生正确的值,这告诉我可能已设置变量,但被绕过或忽略。请注意,USER env变量也会显示为,而print TERM会打印 linux

wsgi.py

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
from django.core.wsgi import get_wsgi_application
from dj_static import Cling
application = Cling(get_wsgi_application())

gunicorn.conf:

description "Gunicorn application server handling myproject"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
setuid myuser
setgid www-data
chdir /home/myuser/directory/myproject/

exec /home/myuser/.virtualenvs/myvirtualenv/bin/gunicorn --chdir=/home/myuser/directory/ --workers 3 --bind unix:/home/myuser/directory/myproject/myproject.sock --env DJANGO_SETTINGS_MODULE=myproject.settings myproject.wsgi:application

的/ etc / nginx的/位点可用/ myproject的:

server {
    listen 80;
    server_name myapp.cloudapp.net;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/myuser/directory/myproject;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/myuser/directory/myproject/myproject.sock;
    }
}

注意:如果您需要,请向我询问更多信息。

1 个答案:

答案 0 :(得分:2)

所以设置环境变量的气密(希望)方式是gunicorn可以毫不费力地编辑gunicorn.conf,如下所示:

exec /home/myuser/.virtualenvs/myvirtualenv/bin/gunicorn --chdir=/home/myuser/directory/ --workers 3 --bind unix:/home/myuser/directory/myproject/myproject.sock -e var1=value1 -e var2=value2 myproject.wsgi:application

到目前为止,这对我很有帮助。如果我遇到任何问题,我会更新此答案。