Celery 3.1.9 Django集成,指定设置文件,不使用djcelery

时间:2014-02-18 20:43:08

标签: django celery

我今天开始使用芹菜3.1.9和Django。这个更新的版本与django更紧密地集成,无需使用django-celery。

我使用了多个设置文件,我想知道在初始化celery worker时是否有一种简单的方法来指定要使用的设置文件?

使用djcelery非常简单,因为它使用manage.py命令。

我天真地试图检查是否

settings.DEBUG在celery.py文件中是正确的,但当然失败了,因为尚未加载设置!

下一步是潜入django-celery来源并模仿他们正在做的事情,但在此之前,我希望有人找到了一种简单的方法来实现这一目标?

谢谢

2 个答案:

答案 0 :(得分:5)

解决方案是使用环境变量。

celery.py

而不是

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

使用

os.environ.setdefault('DJANGO_SETTINGS_MODULE', '{0}'.format(get_env_setting('DJANGO_SETTINGS_MODULE')))

get_env_setting定义为:

from os import environ
from django.core.exceptions import ImproperlyConfigured

# https://github.com/twoscoops/django-twoscoops-project/blob/develop/project_name/project_name/settings/production.py#L14-L21
def get_env_setting(setting):
    """ Get the environment setting or return exception """
    try:
        return environ[setting]
    except KeyError:
        error_msg = "Set the %s env variable" % setting
        raise ImproperlyConfigured(error_msg)

您可以将其放在settings.base.py中,例如

然后为每个环境设置DJANGO_SETTINGS_MODULE环境变量。例如。在生产环境中将其设置为my_project.settings.production。可以通过将以下行添加到〜/ .bashrc:

来永久设置此变量
export DJANGO_SETTINGS_MODULE=my_project.settings.production

答案 1 :(得分:1)

在命令行初始化芹菜工作者时,只需在celery命令之前设置环境变量。

DJANGO_SETTINGS_MODULE='proj.settings' celery -A proj worker -l info