Django Sphinx文档不读取设置文件中的环境变量

时间:2019-11-22 10:22:54

标签: django docker environment-variables python-sphinx cookiecutter-django

我想用狮身人面像记录我的cookiecutter django项目。问题是,运行make html时,狮身人面像使我在读取配置文件时遇到问题。它说django.core.exceptions.ImproperlyConfigured: Set the USE_DOCKER environment variable

当不调用django.setup()时,也会对我的envs引发错误:django.core.exceptions.ImproperlyConfigured: Set the POSTGRES_DB environment variable对它们进行硬编码时,该错误继续抱怨下一个环境变量。我无法将它们全部硬编码到配置文件中,这不是一个选择。

我的环境变量已正确配置。当我运行本地主机将它们打印出来时,它们在那里。狮身人面像似乎无法处理它们。我也在使用docker,所以也许这可能会干扰但我不知道。这是我的狮身人面像配置的一部分:

sys.path.insert(0, os.path.abspath('..'))
os.environ['DJANGO_SETTINGS_MODULE'] = 'config.settings.local'

这是我的本地设置的一部分:


# ------------------------------------------------------------------------------
# https://django-extensions.readthedocs.io/en/latest/installation_instructions.html#configuration
INSTALLED_APPS += ['django_extensions']  # noqa F405


# https://docs.djangoproject.com/en/dev/ref/settings/#databases
DATABASES = {
    # 'default': env.db('DATABASE_URL'),  # This was the default value, but modification below seemed necessary
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': env("POSTGRES_DB"),
        'USER': env("POSTGRES_USER"),
        'PASSWORD': env("POSTGRES_PASSWORD"),
        'HOST': env("POSTGRES_HOST"),
        'PORT': env("POSTGRES_PORT"),
     }
}

感谢您提供任何帮助。预先感谢!

2 个答案:

答案 0 :(得分:0)

因此,显然有些应用程序无法使用环境从文件中读取设置。另一个问题是docker alpine映像未预安装make

我通过在docker映像(make中安装apk add make并在使用docker-compose -f local.yml run django make -C ./docs html旋转容器的同时构建文档来使其工作。感谢uzi0espil带领我到达那里。

有关更多信息,请参见:

https://github.com/pydanny/cookiecutter-django/issues/1747 https://github.com/cookiecutter/cookiecutter/issues/1251

答案 1 :(得分:0)

我遇到了同样的问题,与 RTD 构建传递有关,但没有正确渲染整个内容。

问题

我的代码有:

os.environ['MY_ENV_VAR']

RTD 构建会通过,但不会呈现任何 autodoc 元素。由于无法识别 ['MY_ENV_VAR'] 的键,导入失败,引发 KeyError(key)。

可以通过在 RTD 帐户主页的“构建”下查看构建日志的 RAW 输出来发现此错误。

解决方案

要解决此问题,您可以在管理员/环境变量的 RTD 帐户中添加所需的环境密钥(例如“POSTGRES_DB”)。在这里您可以添加所需的键,根据我的经验,您可以为值添加无意义的值。 RTD 构建现在将完全通过,因为它可以识别您在调用 os.environ[] 时传递的密钥。