2016-05-21 14 views
2

Ich versuche Sellerie und Redis-Warteschlange zu verwenden, um eine Aufgabe für meine Django App durchzuführen. Supervisord ist auf dem Host über apt-get installiert, während Sellerie in einem bestimmten virtualenv auf meinem System, installiert über `pip.Running Supervisord vom Host, Sellerie von einer Virtualenv (Django App)

Als Ergebnis kann ich nicht scheinen, die celery Befehl über Supervisord zu laufen. Wenn ich es von innerhalb des virtualenv laufe, funktioniert es gut, außerhalb davon ist es nicht. Wie bekomme ich es unter meiner aktuellen Einrichtung laufen? Ist die Lösung einfach zu installieren celery über apt-get, anstatt innerhalb der virtualenv? Bitte beraten.

Mein celery.conf innen /etc/supervisor/conf.d ist:

[program:celery] 
command=/home/mhb11/.virtualenvs/myenv/local/lib/python2.7/site-packages/celery/bin/celery -A /etc/supervisor/conf.d/celery.conf -l info 
directory = /home/mhb11/somefolder/myproject 
environment=PATH="/home/mhb11/.virtualenvs/myenv/bin",VIRTUAL_ENV="/home/mhb11/.virtualenvs/myenv",PYTHONPATH="/home/mhb11/.virtualenvs/myenv/lib/python2.7:/home/mhb11/.virtualenvs/myenv/lib/python2.7/site-packages" 
user=mhb11 
numprocs=1 
stdout_logfile = /etc/supervisor/logs/celery-worker.log 
stderr_logfile = /etc/supervisor/logs/celery-worker.log 
autostart = true 
autorestart = true 
startsecs=10 

stopwaitsecs = 600 

killasgroup = true 

priority = 998 

Und die Ordnerstruktur für meine Django-Projekt ist:

/home/mhb11/somefolder/myproject 
├── myproject 
│ ├── celery.py  # The Celery app file 
│ ├── __init__.py  # The project module file (modified) 
│ ├── settings.py  # Including Celery settings 
│ ├── urls.py 
│ └── wsgi.py 
├── manage.py 
├── celerybeat-schedule 
└── myapp 
    ├── __init__.py 
    ├── models.py 
    ├── tasks.py  # File containing tasks for this app 
    ├── tests.py 
    └── views.py 

Wenn ich tun status check via supervisorctl, bekomme ich einen FATAL Fehler auf der command Ich versuche in sellery.conf zu laufen. Hilfe!

p.s. Beachten Sie, dass der Benutzer mhb11 keine Root-Rechte hat, falls es darauf ankommt. Außerdem ist /etc/supervisor/logs/celery-worker.log leer. Und innerhalb supervisord.log der relevante Fehler, den ich sehe, ist INFO spawnerr: can't find command '/home/mhb11/.virtualenvs/redditpk/local/lib/python2.7/site-packages/celery/bin/‌​celery'.

+0

Was passiert, wenn Sie '/home/mhb11/.virtualenvs/myenv/local/lib/python2.7/site-packages/sellery/bin/celery-A/etc/supervisor/conf.d/celery.conf ausführen -l info' vom Terminal? –

+0

Was hat '/ etc/supervisor/logs/sellery-worker.log'? Was hat '/ var/log/supervisord.log' oder'/var/log/supervisor/supervisord.log'? –

+0

@MuhammadTahir: '/ etc/supervisor/logs/sellerie-worker.log' ist leer. Innerhalb 'supervisord.log' ist der relevante Fehler, den ich sehe,' INFO spawnerr: kann Befehl nicht finden '/home/mhb11/.virtualenvs/redditpk/local/lib/python2.7/site-packages/sellery/bin/cellery' '. –

Antwort

4

Pfad zu Sellerie binär ist myenv/bin/celery, während Sie myenv/local/lib/python2.7/site-packages/celery/bin/cel‌‌​​ery verwenden.

Also, wenn Sie an Ihrem Terminal den Befehl, den Sie an Supervisor übergeben (Befehl = xxx) versuchen, sollten Sie den gleichen Fehler erhalten.

Sie benötigen command=xxx in Ihrem celery.conf mit

command=/home/mhb11/.virtualenvs/myenv/bin/celery -A myproject.celery -l info 

Hinweis zu ersetzen, die ich habe auch -A Parameter mit Sellerie App ersetzt, statt Supervisor Konfiguration. Diese Sellerie App ist relevant für Ihr Projektverzeichnis festgelegt in celery.conf mit

directory = /home/mhb11/somefolder/myproject 

Auf einer seitlichen Anmerkung, wenn Sie Sellerie mit Django verwenden, können Sie Sellerie mit Djangos manage.py, keine Notwendigkeit, Sellerie direkt aufrufen verwalten. Wie

python manage.py celery worker 
python manage.py celery beat 

Für Detail bitte Intro von Django Sellerie lesen.

+0

Tahir, danke für die Antwort. Ich werde es ausprobieren und zu dir zurückkommen. –

+0

Sie haben Recht. Ich habe diesen Teil der Dokumentation übersehen, weil ich dachte, ich müsste auf den Installationsordner für Sellerie zugreifen. In der Tat musste ich auf '/ .virtualenvs/myenv/bin/sellery' zugreifen, den Ordner, in dem ausführbare Skripte gespeichert sind. –

+0

Django Sellerie ist jetzt veraltet - "Old Django Sellerie Integrationsprojekt." –