Сельдерей-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 и не забывайте кавычки