【发布时间】:2018-09-03 01:06:20
【问题描述】:
在我的 Django 项目中,我需要访问 DJANGO_DEVELOPMENT 环境变量,该变量告诉它是开发服务器还是生产服务器(DigitalOcean 上的 droplet)。
我想在这个 Droplet 上将 DJANGO_DEVELOPMENT 设置为 1,但它不起作用。
我已经添加到/etc/environment这一行:
DJANGO_DEVELOPMENT="1"
并重新启动整个 Droplet。
然后,我试图在settings.py 中记录这个变量:
if os.environ.get('DJANGO_DEVELOPMENT') == '1':
logger.info('DJANGO_DEVELOPMENT=="1"')
from dev_settings import *
else:
logger.info('no DJANGO_DEVELOPMENT VAR')
logger.info(os.environ.get('DJANGO_DEVELOPMENT'))
logger.info(os.environ.items())
记录这个:
2018-03-24 13:09:43,007 - MyProject.settings - INFO - no DJANGO_DEVELOPMENT VAR
2018-03-24 13:09:43,007 - MyProject.settings - INFO - None
2018-03-24 13:09:43,014 - MyProject.settings - INFO - [('LANG', 'en_US.UTF-8'), ('SUPERVISOR_SERVER_URL', 'unix:///var/run/supervisor.sock'), ('SUPERVISOR_ENABLED', '1'), ('SUPERVISOR_PROCESS_NAME', 'daphne'), ('DJANGO_SETTINGS_MODULE', 'MyProject.settings'), ('SUPERVISOR_GROUP_NAME', 'daphne'), ('PATH', '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'), ('LC_ALL', 'en_US.UTF-8')]
但是当我ssh到液滴并手动检查变量时,它似乎被设置了:
root@MyProject-v1:~# echo $DJANGO_DEVELOPMENT
1
root@MyProject-v1:~# su - futilestudio
futilestudio@MyProject-v1:~$ echo $DJANGO_DEVELOPMENT
1
futilestudio@MyProject-v1:~$
不知道问题出在哪里,是不是bug?
【问题讨论】:
-
您是否尝试
print(os.environ.get('DJANGO_DEVELOPMENT'))只是为了检查它返回的内容并查看它所持有的值的类型?也许不是string,而是int。 -
是的,在 ssh 控制台中,它返回 '1',而在 django 设置中,它是 None,从日志文件中可以看到。
-
好的。最近我遇到了类似的问题。尝试以这种方式访问该值:
os.environ['DJANGO_DEVELOPMENT']。这是同样的事情,但它为我解决了问题。 -
查看
os.environ返回的另一个选项是激活你的droplet端的python shell并通过os.environ调用变量,看看它是否有效。
标签: python django linux ubuntu environment-variables