在一个Ubuntu的机器上托pipe我的Django应用程序(使用postgres后端),当我使用命令gunicorn --bind 0.0.0.0:8080 --env DJANGO_SETTINGS_MODULE=myproject.settings myproject.wsgi:application启动gunicorn作为我唯一的web服务器时,我的envvariables被完全检测到gunicorn --bind 0.0.0.0:8080 --env DJANGO_SETTINGS_MODULE=myproject.settings myproject.wsgi:application
接下来,我安装了nginx并将其configuration为与gunicorn(使用数字海洋指南在这里 )的反向代理。 没有主pipe。 这个新的Web服务器configuration正确启动,除了现在它根本不检测envvariables。
想象一下,我的envvariables是awake = 1和secret = abc123 。 我已经试过把export awake=1和export secret=abc123放在/etc/environment (全局设置)的gunicorn.conf /etc/default/nginx中。 我也尝试将它们添加到nginx.conf作为env awake=1; env secret=abc123; 。
没有工作。
现在看来,这个nginx
除了TZvariables外,删除从其父进程inheritance的所有环境variables
资料来源: http : //nginx.org/en/docs/ngx_core_module.html#env难道这就是为什么我没有试图接近工作? 尽pipe如此, echo $awake在命令行上产生1,这告诉我可能已经设置了variables,但被绕过或忽略。
这变得非常令人沮丧。 任何人都可以帮我找出这一个呢? 提前致谢。
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; } }
注意:如果您需要,请询问更多信息
我build议把你的envvariables设置在你运行gunicorn的地方,像这样: gunicorn --bind0.0.0.0:8080 -e var1=value1 -e var2=value2 myproject.wsgi:application 。 这应该适合你。