纠正gunicorn.conf以获取Django使用的环境变量

Jon*_*nas 4 django virtualenv gunicorn

我正在使用Nginx作为Web服务器并Gunicorn安装在我的VPS上部署Django应用程序virtualenv.(我用virtualenvvirtualenvwrapper.)

当我Gunicorn像这样运行时,可以找到环境变量(例如数据库密码,名称):

workon virtual_env_name
# from my_project's root path
gunicorn my_project.wsgi --bind localhost:9000 --daemon
# this works
Run Code Online (Sandbox Code Playgroud)

我以这种方式导出环境变量:

# /home/user_name/Envs/virtual_env_name/bin/postactivate
export DATABASE_PASSWORD="secret_password"
Run Code Online (Sandbox Code Playgroud)

但是,下面的方法不会(无论是否virtual_env_name激活):

sudo service gunicorn start
# env variables can't be found - KeyError thrown
Run Code Online (Sandbox Code Playgroud)

这是我的gunicorn.conf脚本的样子:

start on (local-filesystems and net-device-up IFACE=eth0)
stop on runlevel [!12345]

# If the process quits unexpectadly trigger a respawn
respawn

setuid user_name
setgid www-data
chdir /home/user_name/my_project

exec /home/user_name/Envs/virtual_env_name/bin/gunicorn \
    --name=my_project \
    --pythonpath=/home/user_name/my_project \
    --bind=127.0.0.1:9000 \
    my_project.wsgi:application
Run Code Online (Sandbox Code Playgroud)

gunicorn.conf如果我将所有密码,密钥硬编码到我的Django settings.py而不是使用,我可以确认这是有效的os.environ[..].

当我开始时Gunicorn,我需要做些什么才能找到我的环境变量sudo service start?第一种和第二种方式有什么区别?谢谢.

Dan*_*man 6

您需要在gunicorn.conf中定义这些变量.

env DATABASE_PASSWORD="secret_password"
Run Code Online (Sandbox Code Playgroud)

  • 首先,因为新贵在一个全新的环境中开始你的工作.其次,因为变量都是字符串,"False"是布尔值true. (2认同)