首页 > 解决方案 > 具有多个 Django 站点的 Celery

问题描述

我有几个客户网站的一个 django 后端:

my_proj
    |- my_proj
        |- __init__.py
        |- settings.py
        |- settings_development.py
        |- settings_production_1.py
        |- settings_production_2.py
        |- settings_production_3.py
    |- my_app_1
    |- my_app_2
    ...

settings_production_1.py:

from settings import *

DEBUG = False
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'customer_1_db',
        'USER': 'some_user',
        'PASSWORD': 'some_passw',
        'HOST': '127.0.0.1',
        'PORT': '',
    }
}
MEDIA_ROOT = 'media/customer_1'

每个站点都是由 supervisord 管理的单独进程,并使用单独的数据库。我也有一个单独的服务器上的redis。

我需要一些具有数据库访问权限的 celery 后台任务。

我怎样才能做到这一点?

更新

好的,我可以运行多个芹菜工人。我可以从控制台做到这一点

$ export DJANGO_SETTINGS_MODULE=my_proj.settings_production_2
$ /home/.../my_vitrual_env/bin/celery -A my_proj worker -l info

但我不能从 supervisord 运行它

[program:celery2]
directory=/home/.../my_proj
command=/home/.../my_vitrual_env/bin/celery -A asl worker -l info
environment=DJANGO_SETTINGS_MODULE=my_proj.settings_production_2
...

标签: djangorediscelery

解决方案


您为您的项目配置一个应用程序。例如:


    my_proj
      | - my_proj
        |- __init__.py
        |- celery.py
        |- settings.py
        |- settings_development.py
        |- settings_production_1.py
        |- settings_production_2.py
        |- settings_production_3.py

等等

在 celery.py 中,您可以通过设置env 变量从适当的设置对象DJANGO_SETTINGS_MODULE配置 celery 应用程序,并使用它来加载适当的设置。

celery multi -A my_proj然后在 supervisord 中,通过将起始行指定为正确的DJANGO_SETTINGS_MODULEenv 变量,为每个站点提供自己的 celery 。


推荐阅读