更正 gunicorn.conf 以获取 Django 使用的环境变量
Correct gunicorn.conf to get environmental variables for Django use
我正在我的 VPS 上部署一个 Django 应用程序,使用 Nginx
作为 Web 服务器,Gunicorn
安装在 virtualenv
中。 (我正在使用 virtualenv
和 virtualenvwrapper
。)
当我这样运行Gunicorn
时,可以查到环境变量(如数据库密码,名称):
workon virtual_env_name
# from my_project's root path
gunicorn my_project.wsgi --bind localhost:9000 --daemon
# this works
我是这样导出环境变量的:
# /home/user_name/Envs/virtual_env_name/bin/postactivate
export DATABASE_PASSWORD="secret_password"
然而下面的方式没有(无论是否激活virtual_env_name
):
sudo service gunicorn start
# env variables can't be found - KeyError thrown
这是我的 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
如果我将所有密码硬编码到我的 Django 的 settings.py
而不是使用 os.environ[..]
.
,我可以确认这个 gunicorn.conf
有效
当我用 sudo service start
启动 Gunicorn
时,我需要做什么才能找到我的环境变量?第一种方式和第二种方式有什么区别?谢谢。
您需要在 gunicorn.conf 中定义这些变量。
env DATABASE_PASSWORD="secret_password"
您没有 运行 virtualenv 中的代码。
而不是 exec
使用
pre-start script
workon virtual_env_name
end script
script
gunicorn \
--name=my_project \
--pythonpath=/home/user_name/my_project \
--bind=127.0.0.1:9000 \
my_project.wsgi:application
end script
workon
更新您的 $PATH
环境变量。
我正在我的 VPS 上部署一个 Django 应用程序,使用 Nginx
作为 Web 服务器,Gunicorn
安装在 virtualenv
中。 (我正在使用 virtualenv
和 virtualenvwrapper
。)
当我这样运行Gunicorn
时,可以查到环境变量(如数据库密码,名称):
workon virtual_env_name
# from my_project's root path
gunicorn my_project.wsgi --bind localhost:9000 --daemon
# this works
我是这样导出环境变量的:
# /home/user_name/Envs/virtual_env_name/bin/postactivate
export DATABASE_PASSWORD="secret_password"
然而下面的方式没有(无论是否激活virtual_env_name
):
sudo service gunicorn start
# env variables can't be found - KeyError thrown
这是我的 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
如果我将所有密码硬编码到我的 Django 的 settings.py
而不是使用 os.environ[..]
.
gunicorn.conf
有效
当我用 sudo service start
启动 Gunicorn
时,我需要做什么才能找到我的环境变量?第一种方式和第二种方式有什么区别?谢谢。
您需要在 gunicorn.conf 中定义这些变量。
env DATABASE_PASSWORD="secret_password"
您没有 运行 virtualenv 中的代码。
而不是 exec
使用
pre-start script
workon virtual_env_name
end script
script
gunicorn \
--name=my_project \
--pythonpath=/home/user_name/my_project \
--bind=127.0.0.1:9000 \
my_project.wsgi:application
end script
workon
更新您的 $PATH
环境变量。