2011-01-24 18 views
5

Próbuję użyć MongoDB jako kolejki wiadomości dla Selera (w aplikacji Django). Obecna wersja rozwojowa Celery (2.2.0rc2) ma pozwolić ci to zrobić, ale nie mogę sprawić, żeby jakikolwiek robotnik odebrał zadania, które tworzę.Używanie MongoDB jako kolejki wiadomości dla Celery

Wersje: seler v2.2.0rc3
MongoDB 1.6.5
pymongo 1,9
django-seler 2.2.0rc2

W moich ustawieniach mam:

CELERY_RESULT_BACKEND = "mongodb" 
CELERY_MONGODB_BACKEND_SETTINGS = { 
    # Shouldn't need these - defaults are correct. 
    "host": "localhost", 
    "port": 27017, 
    "database": "celery", 
    "taskmeta_collection": "messages", 
} 

BROKER_BACKEND = 'mongodb' 
BROKER_HOST = "localhost" 
BROKER_PORT = 27017 
BROKER_USER = "" 
BROKER_PASSWORD = "" 
BROKER_VHOST = "" 

import djcelery 
djcelery.setup_loader() 

I utworzono plik test tasks.py w następujący sposób:

from celery.decorators import task 

@task() 
def add(x, y): 
    return x + y 

Jeśli strzelałem selera w tle, wydaje się, że zaczyna się normalnie. I wtedy otworzyć powłokę Pythona i uruchom następujące:

>>> from myapp.tasks import add 
>>> result = add.delay(5,5) 
>>> result 
<AsyncResult: 7174368d-288b-4abe-a6d7-aeba987fa886> 
>>> result.ready() 
False 

Problem jest to, że nie ma pracowników kiedykolwiek odebrać zadań. Czy brakuje mi jakiegoś ustawienia? Jak wskazać selera do kolejki komunikatów?

+0

Czy aplikacja jest zainstalowana? Czym jest powracający seler w swoich dziennikach? Powszechny powód, że .ready() zwróci Fałsz, gdy tak naprawdę nie powinno, ponieważ zadania nie są rozpoznawane, Celery powie coś w stylu "Nieznane zadanie ignorowane: ...." – Bartek

+0

Czy kiedykolwiek działało to? Mam ten sam problem – Nathan

+0

Niestety nie. – Joe

Odpowiedz

0

Pamiętaj, że Kombu działa tylko z Mongo 1.3+, ponieważ potrzebuje funkcji findandmodify. Jeśli korzystasz z Ubuntu, ostatnia wersja w repozytorium to 1.2, niż nie działa.

Może trzeba także ustawić BROKER_VHOST = „dbname”

mnie na bieżąco, jeśli działa

0

należy dodać to w ustawieniach, lub pracownicy nie mogą znaleźć zadanie i będzie zawodzi cicho.

CELERY_IMPORTS = ("namespace",) 
0

Miałem ten sam problem, ale po przejściu na selekcje 2.3.3 wszystko działało jak czar.

2

Mieliśmy ten sam problem. Podczas gdy dokument mówi, że wszystkie zadania powinny być zarejestrowane w aplikacji Celery, dzwoniąc pod numer

import djcelery 
djcelery.setup_loader() 

to nie działa poprawnie. Dlatego nadal używaliśmy ustawienia w pliku settings.py w ustawieniu

Pamiętaj także, by ponownie uruchomić aplikację Seler, jeśli dodasz nowe zadanie, ponieważ Seler musi zarejestrować zadania po pierwszym uruchomieniu.

Django, Celerybeat and Celery with MongoDB as the Broker