python - 配置不当的异常,但它仍然有效
问题描述
我有以下代码:
import django
def process():
django.setup()
from django.conf import settings
print(settings.configured())
print(settings.SECRET_KEY)
if __name__ == "__main__":
process()
当我尝试使用 docker 内的 cron 定义的所有 env 变量运行它时,我得到:
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
列表。
所以我的问题是,为什么会有例外?
解决方案
错误消息的关键部分是:
> 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
推荐阅读
- python - 从 powerpoint 中提取声音文件
- java - 为什么我的 Angular/Spring Boot 应用程序在使用 AWS Beanstalk 部署时会在刷新时显示白标签错误?
- django - Page Nation 应用于搜索视图,但不显示搜索结果
- html - 如何获得类似的域名以重定向到我的网站?
- python - 为什么我会为一组骑行数据得到这个值错误,即使它对于不同的骑行非常有效
- sql - 查找每个日期的最高销售时间
- javascript - Svelte on:click 功能更新数据,但不更新 UI
- amazon-web-services - 将文件从 s3 复制到本地?
- java - SQL 错误或缺少数据库(“DUPLICATE”附近:语法错误
- c# - 如何使用标签在文本文件中查找文本?