在托管我的 Django 应用程序(带有 postgres 后端)的 ubuntu 机器上,当我使用以下命令启动 gunicorn 作为我唯一的 Web 服务器时,我的环境变量被完美地检测到gunicorn --bind 0.0.0.0:8080 --env DJANGO_SETTINGS_MODULE=myproject.settings myproject.wsgi:application
接下来,我安装了 nginx,并将其配置为使用 gunicorn 的反向代理(使用 digital ocean指南在这里)。没有主管。这个新的 Web 服务器配置正确启动,但现在它根本检测不到环境变量。
想象一下我的环境变量是醒着=1和秘密=abc123。我已经尝试将export awake=1
和放入export secret=abc123
、、 中/etc/default/nginx
(将它们设置为全局变量)。我还尝试将它们作为和添加到 nginx.conf 中。gunicorn.conf
/etc/environment
env awake=1;
env secret=abc123;
什么都没起作用。
现在看来 nginx
删除从其父进程继承的所有环境变量(TZ 变量除外)
来源:http://nginx.org/en/docs/ngx_core_module.html#env这可能是我尝试的所有方法都无法奏效的原因吗?尽管如此,echo $awake
命令行上的结果是 1,这告诉我也许变量已设置,但被绕过或忽略了。
这真是太令人沮丧了。有人能帮我解决这个问题吗?提前谢谢了。
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;
}
}
注:如有需要请询问更多信息
答案1
我建议在运行 gunicorn 的地方设置环境变量,如下所示:gunicorn --bind0.0.0.0:8080 -e var1=value1 -e var2=value2 myproject.wsgi:application
。这应该对你有用。