【问题标题】:ImproperlyConfigured exception but it works anyway配置不当的异常,但它仍然有效
【发布时间】:2019-09-19 03:50:42
【问题描述】:

我有以下代码:

import django

def process():

    django.setup()

    from django.conf import settings
    print(settings.configured())
    print(settings.SECRET_KEY)


if __name__ == "__main__":
    process()

当我尝试使用 docker 内的 cron 定义的所有环境变量运行它时,我得到:

cron_1          | Traceback (most recent call last):
cron_1          |   File "process_tasks.py", line 16, in <module>
cron_1          |     process()
cron_1          |   File "process_tasks.py", line 8, in process
cron_1          |     django.setup()
cron_1          |   File "/usr/local/lib/python3.7/dist-packages/django/__init__.py", line 19, in setup
cron_1          |     configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
cron_1          |   File "/usr/local/lib/python3.7/dist-packages/django/conf/__init__.py", line 57, in __getattr__
cron_1          |     self._setup(name)
cron_1          |   File "/usr/local/lib/python3.7/dist-packages/django/conf/__init__.py", line 42, in _setup
cron_1          |     % (desc, ENVIRONMENT_VARIABLE))
cron_1          | django.core.exceptions.ImproperlyConfigured: Requested setting LOGGING_CONFIG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
cron_1          | app.settings.dev
cron_1          | True
cron_1          | dev

当我在没有 cron 的情况下运行它时,我没有收到异常。 但一切似乎都很好,尽管有这个例外。对于 cronjob,我使用的是:

* * * * * root . /root/env.sh; cd /app/; python3 process_tasks.py > /proc/1/fd/1 2>/proc/1/fd/2

在 env.sh 文件中,只有写成 export VAR=VALUE 列表的 env 变量。

所以我的问题是,为什么会有例外?

【问题讨论】:

    标签: python django docker cron


    【解决方案1】:

    错误信息的关键部分是:

    > You must either define the environment variable DJANGO_SETTINGS_MODULE
    

    你可以做到这一点

    import os
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
    

    或者您可以将其导出到您的env.sh

    export DJANGO_SETTINGS_MODULE=mysite.settings
    

    【讨论】:

    • 问题是,它实际上是在 env.sh 中定义的,如果我尝试在代码中获取它,我会看到它,但无论如何都会抛出异常。其余代码可以正常工作,如果设置加载不正确,则不会。
    • 我认为您必须添加更多详细信息。您说其余代码有效,但您的问题中没有其他代码。
    • 如果设置未正确加载,打印语句将无法工作,但所有其他工作,如查询模型、保存到数据库等。
    猜你喜欢
    • 1970-01-01
    • 2012-10-30
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2021-06-13
    • 2022-01-11
    相关资源
    最近更新 更多