Сельдерей-Django как демон: настройки не найдены

после в этом уроке, теперь у меня есть приложение сельдерей-Django, которое работает нормально, если я запускаю работника с этой командой: сельдерей-работник myapp - N worker1.%h

в моем Django settings.py, я установил все параметры для сельдерея (IP брокера сообщений и т. д...). Все работает хорошо.

мой следующий шаг теперь, чтобы запустить это приложение в качестве демона. Поэтому я последовал это второй урок и все просто, за исключением теперь, мой Параметры сельдерея, включенные в settings.py не заряжены. Например, IP-адрес брокера сообщений установлен в 127.0.0.1, но в моем settings.py, я установил его на другой IP-адрес.

в учебнике, они говорят:

убедитесь, что модуль, определяющий экземпляр приложения сельдерея, также задает значение по умолчанию для DJANGO_SETTINGS_MODULE, как показано в примере проекта Django в первые шаги с Django.

поэтому я убедился. Я был в / etc / default / celeryd это:

экспорт DJANGO_SETTINGS_MODULE= " myapp.настройки"

все еще не работает... Поэтому у меня также была эта строка в /etc / init.д/celeryd, снова не работает. Я не знаю, что делать. У кого-то есть ключ?

изменить: Вот мой celery.py:

from __future__ import absolute_import

import os
from django.conf import settings
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')

app = Celery('myapp')

# 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)


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

Изменить #2: Вот мой /etc / default / celeryd:

# Names of nodes to start
#   most will only start one node:
CELERYD_NODES="worker1.%h"

# Absolute or relative path to the 'celery' command:
CELERY_BIN="/usr/local/bin/celery"

# App instance to use
# comment out this line if you don't use an app
CELERY_APP="myapp"

# Where to chdir at start.
CELERYD_CHDIR="/home/ubuntu/myapp-folder/"

# Extra command-line arguments to the worker
CELERYD_OPTS=""

# %N will be replaced with the first part of the nodename.
CELERYD_LOG_FILE="/var/log/celery/%N.log"
CELERYD_PID_FILE="/var/run/celery/%N.pid"

# Workers should run as an unprivileged user.
#   You need to create this user manually (or you can choose
#   a user/group combination that already exists, e.g. nobody).
CELERYD_USER="ubuntu"
CELERYD_GROUP="ubuntu"

# If enabled pid and log directories will be created if missing,
# and owned by the userid/group configured.
CELERY_CREATE_DIRS=1

# Name of the projects settings module.
export DJANGO_SETTINGS_MODULE=myapp.settings
export PYTHONPATH=$PYTHONPATH:/home/ubuntu/myapp-folder

4 ответов


все ответы здесь могут быть частью решения, но в конце концов, он все еще не работает. Но в конце концов мне это удалось.

прежде всего, в /etc/init.d/celeryd, Я изменил эту строку:

CELERYD_MULTI=${CELERYD_MULTI:-"celeryd-multi"}

by:

CELERYD_MULTI=${CELERYD_MULTI:-"celery multi"}

первый был помечен как устаревший, может быть проблемой.

кроме того, я поставил это как вариант: CELERYD_OPTS= "--app=myapp"

и не забудьте экспортировать некоторые среды переменные:

# Name of the projects settings module.
export DJANGO_SETTINGS_MODULE="myapp.settings"
export PYTHONPATH="$PYTHONPATH:/home/ubuntu/myapp-folder"

со всем этим, теперь он работает на моей стороне.


проблема, скорее всего,celeryd не удается найти файл настроек Django, потому что myapp.settings не в $PYTHONPATH потом приложение запускается.

из того, что я помню, Python будет выглядеть в $PYTHONPATH а также локальная папка при импорте файлов. Когда celeryd runs, он, вероятно, проверяет путь для модуля app, не находит его, затем ищет в текущей папке папку app С __init__.py (т. е. модуль python).

Я думаю, что все вам нужно сделать, это добавить это в свой :

export $PYTHONPATH:path/to/your/app

ниже метод не помогает запустить celeryd, а помогает запустить celery worker как службу, которая будет запущена во время загрузки.

команды sudo service celery status тоже работает.

сельдерей.conf

# This file sits in /etc/init
description "Celery for example"
start on runlevel [2345]
stop on runlevel [!2345]
#Send KILL after 10 seconds
kill timeout 10

script

#project(working_ecm) and Vitrualenv(working_ecm/env) settings
chdir /home/hemanth/working_ecm
exec /home/hemanth/working_ecm/env/bin/python manage.py celery worker -B -c 2 -f /var/log/celery-ecm.log --loglevel=info >> /tmp/upstart-celery-job.log 2>&1
end script

respawn

во втором уроке они установили переменную django_settings в:

export DJANGO_SETTINGS_MODULE="settings"

Это может быть причиной того, что ваши настройки не найдены в случае изменения в каталоге "/главная / ubuntu / myapp-папка/" Затем вы определили свое приложение с помощью "myapp", а затем сказали, что настройки находятся в " myapp.настройки"

Это может привести к тому, что он ищет файл настроек в

" / home / ubuntu / myapp-папка / myapp / myapp / настройки"

поэтому мое предложение удалить "приложение myapp."в переменной DJANGO_SETTINGS_MODULE и не забывайте кавычки