2015-11-06 4 views
1

Из того, что я могу сказать, есть два документа, описывающих, как настроить сельдерей. Там есть «Running the worker as a daemon» и есть «First steps with Django».Как настроить Демоны сельдерея с Django

В документации Django, он говорит:

Мы также добавить модуль настроек Django в качестве источника конфигурации для сельдерея. Это означает, что вам не нужно использовать несколько файлов конфигурации и вместо этого настроить Celery непосредственно из настроек Django.

Какие звуки awesome. Однако, от того, что я могу сказать, это те файлы, которые необходимы для полного сельдерея daemonization:

  • /etc/init.d/celeryd
  • /etc/defaults/celery
  • /my-proj/celery.py
  • /my-proj/__init__.py

И возможно:

  • /my-proj/settings.py

Мальчик, у которого много файлов. Я думаю, что у меня их все настроено правильно:

  • /etc/init.d/celeryd имеет the default init.d script обеспечивается сельдерея.
  • /etc/defaults/celery почти ничего. Только указатель на мое приложение:

    export DJANGO_SETTINGS_MODULE='cl.settings' 
    
  • /my-proj/celery.py имеет рекомендованный файл из First Steps with Django:

    from __future__ import absolute_import 
    
    import os 
    
    from celery import Celery 
    
    # set the default Django settings module for the 'celery' program. 
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings') 
    
    from django.conf import settings # noqa 
    
    app = Celery('proj') 
    
    # Using a string here means the worker will not have to 
    # pickle the object when using Windows. 
    app.config_from_object('django.conf:settings') 
    app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 
    
  • /my-proj/__init__.py имеет рекомендованный код с First Steps with Django:

    from __future__ import absolute_import 
    
    # This will make sure the app is always imported when 
    # Django starts so that shared_task will use this app. 
    from .celery import app as celery_app 
    

И у меня есть все сельдерей связанные параметры, как следующее в моем settings.py файле:

CELERY_BIN = '/var/www/.virtualenvs/my-env/bin/celery' 
CELERYD_USER = 'www-data' 
CELERYD_GROUP = 'www-data' 
CELERYD_CONCURRENCY = 20 
BROKER_URL = 'redis://' 
BROKER_POOL_LIMIT = 30 

Тем не менее, когда я начинаю сельдерей с помощью sudo service celeryd start, он не работает. Вместо этого, становится ясно, что он не взял мои настройки из моего проекта Django, потому что он говорит:

Nov 05 20:51:59 pounamu celeryd[30190]: celery init v10.1. 
Nov 05 20:51:59 pounamu celeryd[30190]: Using config script: /etc/default/celeryd 
Nov 05 20:51:59 pounamu celeryd[30190]: No passwd entry for user 'celery' 
Nov 05 20:51:59 pounamu su[30206]: No passwd entry for user 'celery' 
Nov 05 20:51:59 pounamu su[30206]: FAILED su for celery by root 
Nov 05 20:51:59 pounamu su[30206]: - ??? root:celery 
Nov 05 20:51:59 pounamu systemd[1]: celeryd.service: control process exited, code=exited status=1 

Любые идеи, где откачка провод не работает? Мне что-то не хватает?

ответ

0

Вам не хватает CELERY_APP.Установите его в configuration file/etc/defaults/celery или в качестве параметра для команды работника:

celery worker -A my-proj 

В противном случае, сельдерей не имеет ни малейшего представления, он должен смотреть на /my-proj/celery.py. Переменная окружения django не влияет на загрузку Сельдерея.

0

Вы пытаетесь запустить сельдерей в качестве системного пользователя «сельдерей», который по умолчанию используется сценарием init. Вы должны создать этого пользователя, или вы можете отменить это, установив CELERYD_USER в /etc/defaults/celery.

Лично я предпочитаю использовать supervisord для управления сельдереем.

+0

Я устанавливаю CELERY_USER в настройках django. Проблема в том, что эти настройки не получают. – mlissner

Смежные вопросы