Django环境变量无效

时间:2019-12-27 14:46:27

标签: django

我正在gcloud Ubuntu 18.04上运行Django。

每次我尝试设置环境变量而不是字符串时,都会出现错误,但是当我从shell使用echo或os.environ.get()时,它可以正常工作。

settings.py

... #this settings doest work
DB_NAME  = os.environ.get("DB_NAME")
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': DB_NAME,#
        ...
    }
}
...
... #this settings  works fine
DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': "Candlelight",
            ...
        }
    }

来自bash

  ~/myproject$ echo $DB_NAME
    Candlelight

从外壳

 >>> import os
    >>> os.environ.get('DB_NAME')
    'Candlelight'
    >>> 
>>> from core.settings import *
>>> DB_NAME
'Candlelight'
>>> 

.bashrc

export DB_NAME = "Candlelight"

2 个答案:

答案 0 :(得分:1)

您不是从设置env变量的同一shell中运行django(您的用户shell运行.bashrc,但apache却没有)

尝试在/etc/apache2/envvars下添加环境变量,然后重新启动apache服务。

然后在运行django时,应该看到env-var设置。

另一件事,重要的是在设置环境变量时不要有空格,它应该是:

export DB_NAME=Candlelight

答案 1 :(得分:1)

尝试为要获取的var提供默认值:

DB_NAME = os.getenv("DB_NAME", "just_a_test")
print(DB_NAME)

如果打印just_a_test,则表明无法从settings.py访问环境变量。

我不确定您面临的问题(可能有很多事情,特别是例如与Docker一起工作时),但是我将与您分享我现在的管理方式{{ 1}}变量仅对一个env项目有用。我从来没有遇到过这样的问题。

首先,安装Django

python-dotenv

然后,在项目的根目录下创建一个pip install python-dotenv 文件。该文件将包含您要用于项目的所有有用的环境变量:

.env

最后,在您的# .env DB_NAME="Candlelight" 中使用该var(按照惯例,始终将默认值分配给您的var):

settings.py

这样做的主要兴趣:

  • 您不会污染# settings.py from dotenv import load_dotenv load_dotenv() DB_NAME = os.getenv("DB_NAME", "default_val") 文件(因此不会污染会话的全局环境),
  • 与项目有关的所有内容都位于一个单独的.bashrc文件中,如果处理.env回购,则很容易忽略。
  • 您不必关心gitapache2的设置,因为无论如何nginx都会寻找该Django文件。

对我来说,这是处理.env项目的环境变量的最好,最干净的方法!