Неправильно настроенное исключение, но оно все равно работает - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть следующий код:

import django

def process():

    django.setup()

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


if __name__ == "__main__":
    process()

Когда я пытаюсь запустить его со всеми переменными env, определенными cron в docker, я получаю:

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 есть только переменные env, записанные в виде export VAR=VALUE list.

Итак, мой вопрос, почему исключение?

1 Ответ

1 голос
/ 30 апреля 2019

Ключевая часть сообщения об ошибке:

> 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...