Mireczki potrzebuje pomocy z konfiguracją #celery #rabbitmq #supervisor #django #python Miałem sobie na serwerze jedną apkę w #django z taskami #celery na #rabbitmq, celery odpalane przez #supervisor i wszystko działało jak należy. Dołożyłem kolejną apkę w django zachowując ten sam schemat konfiguracji i działa, tylko zaczęły się problemy. Taski z jednej trafiają czasem do drugiej i odwrotnie.
konfiguracją celery.py 1 apki:
import os from celery import Celery from django.conf import settings # set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGOSETTINGSMODULE', 'myshop.settings') os.environ.setdefault('DJANGOCONFIGURATION', 'Production') import configurations configurations.setup() app = Celery('myshop') app.configfromobject('django.conf:settings') app.autodiscovertasks(lambda: settings.INSTALLEDAPPS)
konfiguracją celery.py 2 apki: import os from celery import Celery from django.conf import settings # set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGOSETTINGSMODULE', 'logistyka.settings') os.environ.setdefault('DJANGOCONFIGURATION', 'Production') import configurations configurations.setup() app = Celery('logistyka') app.configfromobject('django.conf:settings') app.autodiscovertasks(lambda: settings.INSTALLEDAPPS)
@svs_svs: średnio się znam, ale może trzeba zdefiniować osobne kolejki
A worker instance can consume from any number of queues. By default it will consume from all queues defined in the task_queues setting (that if not specified falls back to the default queue named celery).
dziwne to, skonfigurowałem jak w linku ze stacka i nie tworzy taska ani nic nie trafia do logów. Jak zaloguje się do shella zaimportuję taska i wywołam to się wykonuje, ale nie trafia nic do logów celery ( ͡°ʖ̯͡°)
@FiKsUmDyRdUm: Nie wiem dlaczego nie działa u mnie ustawienie BROKERURL. Wstawiłem w settings.py
CELERYBROKERURL = 'amqp://logistyka:logistyka@localhost:5672/logistykavhost' i BROKERURL = 'amqp://logistyka:logistyka@localhost:5672/logistykavhost'
a ten ciągle wysyła mi pod domyślny adres: amqp://guest@localhost// próbowałem też dodać do celery.py app = Celery('logistyka', broker='amqp://logistyka:logistyka@localhost:5672/logistyka_vhost') ni cholery nic nie daje, uparta małpa ciągle wysyła na default
@FiKsUmDyRdUm: O panie, żeby było śmieszniej to używam django-configurations dlatego mój celery.py tak wygląda. Próbowałem zintegrować tego hack'a do mojej konfiguracji, jeszcze mi się nie udało. Mam tego dość na dziś, wrócę do tego jutro.
- prawie 29 lat - 160 cm wzrostu - sczupła - ciemne włosy - ciemne oczy - wykształcenie wyższe (magister) - stała, stabilna, w miarę dobrze płatna praca
Myślicie, że w tym roku poznam miłość mojego życia?
Miałem sobie na serwerze jedną apkę w #django z taskami #celery na #rabbitmq, celery odpalane przez #supervisor i wszystko działało jak należy. Dołożyłem kolejną apkę w django zachowując ten sam schemat konfiguracji i działa, tylko zaczęły się problemy. Taski z jednej trafiają czasem do drugiej i odwrotnie.
konfiguracją celery.py 1 apki:
import os
from celery import Celery
from django.conf import settings
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGOSETTINGSMODULE', 'myshop.settings')
os.environ.setdefault('DJANGOCONFIGURATION', 'Production')
import configurations
configurations.setup()
app = Celery('myshop')
app.configfromobject('django.conf:settings')
app.autodiscovertasks(lambda: settings.INSTALLEDAPPS)
konfiguracją celery.py 2 apki:
import os
from celery import Celery
from django.conf import settings
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGOSETTINGSMODULE', 'logistyka.settings')
os.environ.setdefault('DJANGOCONFIGURATION', 'Production')
import configurations
configurations.setup()
app = Celery('logistyka')
app.configfromobject('django.conf:settings')
app.autodiscovertasks(lambda: settings.INSTALLEDAPPS)
konfiguracja supervisor 1 apki:
[program:celeryd]
command=/webapps/myshopdjango/bin/celery -A myshop worker --loglevel=INFO --concurrency=10 -n worker1.%%h
directory=/webapps/myshopdjango/myshop
user=myshop
stdoutlogfile=/webapps/myshopdjango/logs/celeryd.log
stderrlogfile=/webapps/myshopdjango/logs/celeryd.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs=600
konfiguracja supervisor 2 apki:
[program:celerydlogistyka]
command=/webapps/logistykadjango/bin/celery -A logistyka worker --loglevel=INFO --concurrency=10 -n worker2.%%h
directory=/webapps/logistykadjango/logistyka
user=logistyka
stdoutlogfile=/webapps/logistykadjango/logs/celeryd.log
stderrlogfile=/webapps/logistyka_django/logs/celeryd.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs=600
Przerabialiście już podobny problem, albo macie jakiś pomysł?
http://docs.celeryproject.org/en/latest/userguide/workers.html#queues
https://stackoverflow.com/questions/19853378/how-to-keep-multiple-independent-celery-queues
CELERYBROKERURL = 'amqp://logistyka:logistyka@localhost:5672/logistykavhost'
i
BROKERURL = 'amqp://logistyka:logistyka@localhost:5672/logistykavhost'
a ten ciągle wysyła mi pod domyślny adres: amqp://guest@localhost//
próbowałem też dodać do celery.py
app = Celery('logistyka', broker='amqp://logistyka:logistyka@localhost:5672/logistyka_vhost')
ni cholery nic nie daje, uparta małpa ciągle wysyła na default
https://github.com/celery/celery/issues/4359#issuecomment-342002195 tutaj jeszcze znalazłem taki hack, niby ma to zostać naprawione, może Ci pomoże :) ja dotychczas korzystałem z redisa, także nie ogarniam za bardzo rabbitmq