【问题标题】:How to integrate celery with Django, when settings needs to be injected in?当需要注入设置时,如何将 celery 与 Django 集成?
【发布时间】:2014-10-17 13:05:33
【问题描述】:

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

为了运行 Django,我必须像这样加载它:

python manage.py runserver --settings="databank_web.settings.dqs.dev_houman"

我现在必须将 Celery 3.1 集成到项目中,这种方法让我很头疼。

我已按照here. 的描述将 Celery 集成到 Django 中的所有步骤

我可以像往常一样运行 Django,但现在我必须使用我的自定义 Django 环境运行 celery,如solution.中所述

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

我做了一些研究并关注this solution以缩小范围:

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 错误?

非常感谢

【问题讨论】:

  • 由于每个开发人员都有自己的设置文件,因此您很可能其中有问题。尝试在 Python shell 中执行 this 以追踪真正的错误。

标签: python django celery


【解决方案1】:

听起来更像是循环依赖。

如果您按照指南进行操作,您应该已经创建了一个名为 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 变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2020-07-15
    • 1970-01-01
    • 2016-02-04
    • 2014-03-18
    • 2018-08-02
    • 2019-10-25
    相关资源
    最近更新 更多