Сельдерей с несколькими сайтами Django - PullRequest
0 голосов
/ 29 октября 2018

У меня есть один бэкэнд для 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'

Каждый сайт - это отдельный процесс, управляемый супервизором и использующий отдельную базу данных. Также у меня есть redis на отдельном сервере.

Мне нужны некоторые фоновые задачи сельдерея с доступом к базе данных.

Как я могу это сделать?

UPDATE

Хорошо, я могу запустить несколько рабочих из сельдерея. Я могу сделать это с консоли

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

Но я не могу запустить его от супервизора

[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
...

1 Ответ

0 голосов
/ 29 октября 2018

Вы настраиваете приложение для своего проекта. e.g.:


    my_proj
      | - my_proj
        |- __init__.py
        <b>|- celery.py</b>
        |- settings.py
        |- settings_development.py
        |- settings_production_1.py
        |- settings_production_2.py
        |- settings_production_3.py

и т.д.

В файле celery.py вы настраиваете приложение celery из соответствующего объекта настроек , устанавливая переменную DJANGO_SETTINGS_MODULE env и используйте его для загрузки соответствующих настроек.

И затем в супервизоре вы даете каждому сайту свой собственный сельдерей, указывая стартовую строку как celery multi -A my_proj и с правильной переменной DJANGO_SETTINGS_MODULE env.

...