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

标签 python django ubuntu nginx gunicorn

我刚刚为 Django Web 应用程序设置了带有 Nginx(反向代理)的 Gunicorn。根据gunicorn.log,组合似乎正确启动。请注意,我没有使用主管。

但奇怪的是,我的环境变量(在.profile中设置)根本没有被拾取! printenv 显示它们存在。我尝试过的一些方法是将环境变量放入 /etc/default/nginx 中,然后在 etc/environment 中的 .profile 中重新启动 nginx >,在 nginx.conf 中,在 gunicorn.conf 中,等等。它根本不起作用!

顺便说一下,在安装和配置 nginx 之前,即当我只是运行时,它运行得很好:gunicorn --bind 0.0.0.0:8080 --env DJANGO_SETTINGS_MODULE=myproject.settings myproject.wsgi:应用程序.

现在看来nginx:

removes all environment variables inherited from its parent process except the TZ variable

来源:http://nginx.org/en/docs/ngx_core_module.html#env这是否就是我所做的一切都没有达到预期效果的原因?但如果是这样,我想这些添加到 nginx.conf 的变量应该被选中。尽管如此,使用 echo $envvar 会在命令行上产生正确的值,这告诉我变量可能已设置,但被绕过或忽略。请注意,USER 环境变量也显示为 None,而 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/sites-available/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;
    }
}

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

最佳答案

因此,设置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

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

关于python - 配置 Nginx 和 Gunicorn 后未设置环境变量(Ubuntu 机器上的 Django 应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34181555/

相关文章:

python - Plone 插件,命令行程序的 Web 界面开发

python - "List object is not callable"Python 错误

python - django - unique_together 变化 - 生产数据库中有任何危险吗?

django - 当 drf 使用 ListAPIView 返回空查询集时如何返回 404

amazon-web-services - https 为 AWS EC2 Ubuntu 实例引发 ERR_SSL_PROTOCOL_ERROR

python - 如何编写一个可以自动标准化数据的 django 模型?

python - 当 Pyramid 在 CherryPy 之上处理 HTTP 请求时打开了多少数据库连接

python - django 1.10 中的自定义设置和 wsgi 给我错误

ubuntu - 操作系统升级期间 Docker 卷丢失(和 DDEV 数据库)

node.js - 无法安装 node-sass npm 模块