【发布时间】:2017-08-26 16:44:38
【问题描述】:
嗯,我有一个像这样的项目结构:
my_project
|-scripts
| |- my_script.py
|
|-django_project
|- myApp
| |- models.py
| |- ...
|- django_project
|- settings.py
|- ...
我在 virtualenv 中运行 Django,在 my_script.py 中我必须使用一些 myApp.models
所以,我是这样做的:
my_script.py:
#!/usr/bin/env python
import django
django.setup()
from myApp.models import foo
# do things
由于我在 virtualenv 中,为了使 django.setup() 正常工作,我在我的 virtualenv ($VIRTUAL_ENV/bin/postactivate) 中设置:
export DJANGO_SETTINGS_MODULE = django_project.settings
我在路径中添加了django_project:
$ workon my_virtualenv
$ python -c "import sys; print sys.path"
['', '/my_project/django_project', ...]
仅此而已。
如果我激活我的 virtualenv 然后我运行 my_script.py 一切正常。
但如果我安排类似的cron 工作:
00 00 * * * /.../.virtualenvs/my_virtualenv/bin/python /.../my_project/scripts/my_script.py >> /.../test/test.log 2>&1
我得到这个错误:
django.core.exceptions.ImproperlyConfigured:请求的设置 LOGGING_CONFIG,但未配置设置。你必须要么 定义环境变量 DJANGO_SETTINGS_MODULE 或调用 settings.configure() 在访问设置之前。
似乎my_virtualenv 激活设置未正确加载。
为什么会发生这种情况,我该如何解决?
【问题讨论】:
-
删除你的 django.setup() 调用。如果您正在使用/设置 DJANGO_SETTINGS_MODULE,它应该在那里找到您的所有设置。
-
@thebjorn 根据 Django 文档,您必须修复 env 变量并调用 django.setup()。我试过你的提示,但没有用
标签: python django cron virtualenv crontab