Запуск Celery с супервизором: AttributeError: объект «модуль» не имеет атрибута «сельдерей»

Раньше у меня был весь код приложения Flask и код сельдерея в одном файле, и он отлично работал с супервизором. Однако это очень сложно, поэтому я разделяю свои задачи на celery_tasks.py, и возникает эта проблема.

В каталоге моего проекта я могу запустить сельдерей вручную с помощью следующей команды

celery -A celery_tasks worker --loglevel=INFO

Однако, поскольку это сервер, мне нужно, чтобы сельдерей работал как демон в фоновом режиме. Но он показывает следующую ошибку, когда я позвонил sudo supervisorctl restart celeryd

celeryd: ERROR (abnormal termination)

и журнал сказал:

Traceback (most recent call last):
  File "/srv/www/learningapi.stanford.edu/peerAPI/peerAPIenv/bin/celery", line 9, in <module>
    load_entry_point('celery==3.0.19', 'console_scripts', 'celery')()
  File "/srv/www/learningapi.stanford.edu/peerAPI/peerAPIenv/local/lib/python2.7/site-packages/celery/__main__.py", line 14, in main
    main()
  File "/srv/www/learningapi.stanford.edu/peerAPI/peerAPIenv/local/lib/python2.7/site-packages/celery/bin/celery.py", line 957, in main
    cmd.execute_from_commandline(argv)
  File "/srv/www/learningapi.stanford.edu/peerAPI/peerAPIenv/local/lib/python2.7/site-packages/celery/bin/celery.py", line 901, in execute_from_commandline
    super(CeleryCommand, self).execute_from_commandline(argv)))
  File "/srv/www/learningapi.stanford.edu/peerAPI/peerAPIenv/local/lib/python2.7/site-packages/celery/bin/base.py", line 185, in execute_from_commandline
    argv = self.setup_app_from_commandline(argv)
  File "/srv/www/learningapi.stanford.edu/peerAPI/peerAPIenv/local/lib/python2.7/site-packages/celery/bin/base.py", line 300, in setup_app_from_commandline
    self.app = self.find_app(app)
  File "/srv/www/learningapi.stanford.edu/peerAPI/peerAPIenv/local/lib/python2.7/site-packages/celery/bin/base.py", line 318, in find_app
    return sym.celery
AttributeError: 'module' object has no attribute 'celery'

Я использовал следующую конфигурацию.

[program:celeryd]
command = celery -A celery_tasks worker --loglevel=INFO

user=peerapi
numprocs=4

stdout_logfile = <path to log>
stderr_logfile = <path to log>
autostart = true
autorestart = true
environment=PATH="<path to my project>"

startsecs=10

; Need to wait for currently executing tasks to finish at shutdown.
; Increase this if you have very long running tasks.
stopwaitsecs = 600

; When resorting to send SIGKILL to the program to terminate it
; send SIGKILL to its whole process group instead,
; taking care of its children as well.
killasgroup=true

; if rabbitmq is supervised, set its priority higher
; so it starts first
priority=998

Мой код также правильно инициализирует сельдерей

celery = Celery('celery_tasks', broker='amqp://guest:guest@localhost:5672//',
                backend='amqp')
celery.config_from_object(celeryconfig)

и мой celeryconfig.py работает нормально

CELERY_TASK_SERIALIZER='json'
CELERY_RESULT_SERIALIZER='json'
CELERY_TIMEZONE='America/Los Angeles'
CELERY_ENABLE_UTC=True

Любая подсказка?


person kanitw    schedule 09.06.2013    source источник
comment
Вы смотрели здесь: Запуск рабочего как демона   -  person Hodson    schedule 11.06.2013


Ответы (1)


Похоже, ваше приложение не может найти ваш celeryconfig, это происходит потому, что у вас, например, CWD не установлен. Попробуйте использовать что-то вроде: cd app_path; celeryd ... Также вам нужно настроить env

# local settings
PATH=/home/ubuntu/envs/app/bin:$PATH
PYTHONHOME=/home/ubuntu/envs/app/
PYTHONPATH=/home/ubuntu/projects/app/

Должно сработать.

person Rustem    schedule 25.07.2013