Ich benutze den gleichen Server für meine Entwicklung Server und Produktionsserver, mit virtualenv.Isolieren Sellerie für Entwicklung und Produktion
Mein Problem ist Sellerie nicht zu wissen, in welchem Projekt die Aufgabe ausgeführt wird. Ich möchte keine Aufgabe von der Produktion auf meinem Entwicklungsserver laufen und umgekehrt.
Ich habe versucht, verschiedene Broker-Adresse zu verwenden, aber es funktioniert nicht richtig:
Supervisor Skript für die Produktion:
[program:production-celery]
command=/home/user/.virtualenvs/production.site.com/bin/celery --app=myproject.celeryconfig:app worker -E -n production --loglevel=INFO --without-mingle --without-gossip -Q default,celery
directory = /home/user/.virtualenvs/production.site.com/myproject
environment=DJANGO_SETTINGS_MODULE='myproject.settings.production'
Entwicklung:
[program:development-celery]
command=/home/user/.virtualenvs/development.site.com/bin/celery --app=myproject.celeryconfig:app worker -E -n development --loglevel=INFO --without-mingle --without-gossip -Q default,celery
directory = /home/user/.virtualenvs/development.site.com/myproject
environment=DJANGO_SETTINGS_MODULE='myproject.settings.development'
Produktion celeryconfig:
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.production')
app = Celery('myproject', broker='amqp://', backend='amqp')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
app.conf.update(
CELERY_ACCEPT_CONTENT = ['pickle', 'json'],
CELERY_TIMEZONE='Europe/Oslo',
CELERY_ENABLE_UTC=True,
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler',
CELERY_SEND_TASK_ERROR_EMAILS = True,
CELERY_SEND_ERROR_EMAILS = True,
CELERY_STORE_ERRORS_EVEN_IF_IGNORED = True,
CELERY_IGNORE_RESULT = False,
CELERY_TASK_RESULT_EXPIRES = 172800,
)
celeryconfig
Entwicklung:
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.development')
app = Celery('myproject', broker='amqp://development:[email protected]/development')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
app.conf.update(
CELERY_ACCEPT_CONTENT = ['pickle', 'json'],
CELERY_TIMEZONE='Europe/Oslo',
CELERY_ENABLE_UTC=True,
CELERY_SEND_TASK_ERROR_EMAILS = False,
CELERY_STORE_ERRORS_EVEN_IF_IGNORED = True,
CELERY_IGNORE_RESULT = False,
)
Wer weiß, warum Aufgabe von der Produktion auf die Entwicklung ausgeführt werden würde?
Es sieht für mich so aus, als ob Ihre Produktions- und Entwicklungsinstanzen die gleiche Codebasis verwenden, da Sie für beide Selleriearbeiter dasselbe Verzeichnis verwenden. Ist das beabsichtigt? Es scheint mir, dass ein Entwicklungsserver, der dieselbe Codebasis wie der Produktionsserver verwendet, nicht wirklich einen Zweck erfüllt, oder gibt es einen speziellen Fall, den ich übersehen habe? – Tim