如何在Django中集成celery并注入设置?

1 投票
1 回答
707 浏览
提问于 2025-04-28 03:03

我正在做一个新项目,每个开发者都有自己的设置文件。

为了运行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 这个变量。

撰写回答