如何在Django中集成celery并注入设置?
我正在做一个新项目,每个开发者都有自己的设置文件。
为了运行Django,我需要这样加载它:
python manage.py runserver --settings="databank_web.settings.dqs.dev_houman"
现在我需要把Celery 3.1集成到这个项目里,但这个方法让我很头疼。
我按照这里的步骤把Celery集成到Django中,你可以查看这个链接。
我可以像往常一样运行Django,但现在我需要用我自定义的Django环境来运行Celery,具体方法可以参考这个解决方案。
DJANGO_SETTINGS_MODULE='databank_web.settings.dqs.dev_houman' celery -A databank_web worker -l info
这个方法似乎更进一步了,但我却收到了这个错误信息:
File "/Users/houman/git/venv/lib/python2.7/site-packages/django/contrib/admin/sites.py", line 3, in <module>
from django.contrib.admin import ModelAdmin, actions
ImportError: cannot import name actions
我做了一些研究,按照这个解决方案来缩小问题范围:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "databank_web.settings.dqs.dev_houman")
from django.contrib.admin import ModelAdmin, actions
这个方法是为了弄清楚到底是什么错误,不过看起来它运行得很好。所以我不知道为什么在Django环境下会失败。
那么,我为什么会收到这些ImportError: cannot import name actions
的错误呢?
非常感谢!
1 个回答
0
这听起来更像是一个循环依赖的问题。
如果你按照指南操作的话,应该创建了一个叫做 celery.py
的新文件。
在 celery.py
文件中
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
app = Celery('proj')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
把 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
这一行注释掉,因为这会试图覆盖你在外部传入的设置。
然后,在文件外部设置 DJANGO_SETTINGS_MODULE
这个变量。