【问题标题】:Django/Python - can't get environment variable using os.environ.getDjango/Python - 无法使用 os.environ.get 获取环境变量
【发布时间】: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


【解决方案1】:

也试着写

export DJANGO_DEVELOPMENT="1"

/etc/environment.bash_profile

【讨论】:

    【解决方案2】:

    对于工作 Django 接收 DJANGO_SETTINGS_MODULE 环境变量。以同样的方式传递你的变量。

    附:通过传递环境变量来配置开发/生产状态不是很好的方法,对不同的状态使用不同的设置模块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 2018-04-17
      • 2018-01-20
      • 2018-03-04
      • 2021-10-19
      • 1970-01-01
      • 2014-06-04
      相关资源
      最近更新 更多