所以我在Ubuntu Server 14.04上安装了nginx,gunicorn和postgres的Django / Python 3.4.3。服务器为空白,并按照此guide进行设置。我在/etc/environment
中设置了一些环境变量,如下所示并重新启动:
DJANGO_DB_NAME="db"
DJANGO_DB_USER="username"
DJANGO_DB_PASSWORD="password"
DJANGO_SECRET_KEY="9g2&ionu!4u@%@2f&(r0dpp_yplyukxde^*1+evf7ko#_yn6%h"
所以从Django的settings.py文件中我尝试以各种方式访问它,但遇到了意想不到的行为:
'NAME': os.getenv('DJANGO_DB_NAME') # this works correctly
'NAME': os.environ.get('DJANGO_DB_NAME') # this works correctly
'NAME': os.environ['DJANGO_DB_NAME'] # this does NOT work and yields 'key' does not exist
这些都不起作用,因为它返回一个空字符串而不是键值:
SECRET_KEY = os.getenv('DJANGO_SECRET_KEY')
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
SECRET_KEY = os.environ['DJANGO_SECRET_KEY']
Django错误:
File "/webapps/venv/lib/python3.4/site-packages/django/conf/__init__.py", line 120, in __init__
raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
在Ubuntu中,当我从命令行访问环境变量时,我总是得到正确的结果:
root@ubuntu-512mb-sfo1-01:/webapps# echo $DJANGO_SECRET_KEY
9g2&ionu!4u@%@2f&(r0dpp_yplyukxde^*1+evf7ko
root@ubuntu-512mb-sfo1-01:/webapps# echo $DJANGO_DB_USER
username
然而,当我从命令行执行此操作时,它可以工作!
root@ubuntu-512mb-sfo1-01:/webapps# python3 -c "import os; print(os.environ['DJANGO_SECRET_KEY'])"
9g2&ionu!4u@%@2f&(r0dpp_yplyukxde^*1+evf7ko
现在,我真的很困惑。任何专家都知道发生了什么以及如何解决这个问题?
更新1: m.wasowski的评论,gunicorn以root身份运行,运行manage.py runserver再次以root身份运行。当我运行'service gunicorn start'时,Gunicorn只会抱怨。以root身份运行或将密钥存储在环境中的安全问题是暂时的,直到我让它首先运行为止。