有时候无法在Python中获取环境变量?

时间:2016-03-26 00:48:08

标签: python django python-3.x ubuntu ubuntu-14.04

所以我在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身份运行或将密钥存储在环境中的安全问题是暂时的,直到我让它首先运行为止。

0 个答案:

没有答案