2012-05-16 9 views
11

Próbuję skonfigurować seeryd z django i królika-mq. Do tej pory zrobiłem następujący:Błąd połączenia klienta z django i selerem + króliczym znakiem zapytania?

  • Zainstalowane seler z pip
  • Zainstalowane RabbitMQ przez Debs dostępnego z ich repozytorium
  • dodał użytkownik i vhost do RabbitMQ poprzez rabbitmqctl, jak również uprawnienia do że użytkownik
  • rozpoczął RabbitMQ serwerem
  • Zainstalowane django seler poprzez pip
  • Konfigurowanie django seler, włącznie z jego tabel
  • Skonfigurowałem różne rzeczy w settings.py (BROKER_HOST, BROKER_PORT, BROKER_USER, BROKER_PASSWORD, BROKER_VHOST, jak również importowanie djecelery, wywołanie funkcji setup i dodanie jej do ZAINSTALOWANYCH APLIKACJI). Sprawdziłem dwukrotnie i wszystkie te wartości są poprawne (przynajmniej użytkownik, hasło i vhost są poprawne).

Teraz po uruchomieniu python manage.py celeryd -l info pojawiają się błędy połączenia (patrz poniżej). Ktoś ma jakiś pomysł, dlaczego?

$ python manage.py celeryd -l info 
/usr/local/lib/python2.7/dist-packages/djcelery/loaders.py:108: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! 
    warnings.warn("Using settings.DEBUG leads to a memory leak, never " 
[2012-05-15 18:38:04,486: WARNING/MainProcess] 

-------------- [email protected] v2.5.3 
---- **** ----- 
--- * *** * -- [Configuration] 
-- * - **** --- . broker:  amqp://[email protected]:5672/celeryhost 
- ** ---------- . loader:  djcelery.loaders.DjangoLoader 
- ** ---------- . logfile:  [stderr]@INFO 
- ** ---------- . concurrency: 1 
- ** ---------- . events:  OFF 
- *** --- * --- . beat:  OFF 
-- ******* ---- 
--- ***** ----- [Queues] 
-------------- . celery:  exchange:celery (direct) binding:celery 


[Tasks] 


[2012-05-15 18:38:04,562: INFO/PoolWorker-1] child process calling self.run() 
[2012-05-15 18:38:04,565: WARNING/MainProcess] [email protected] has started. 
[2012-05-15 18:38:07,572: ERROR/MainProcess] Consumer: Connection Error: [Errno 104] Connection reset by peer. Trying again in 2 seconds... 
^C[2012-05-15 18:38:08,434: WARNING/MainProcess] celeryd: Hitting Ctrl+C again will terminate all running tasks! 
[2012-05-15 18:38:08,435: WARNING/MainProcess] celeryd: Warm shutdown (MainProcess) 
[2012-05-15 18:38:09,372: INFO/PoolWorker-1] process shutting down 
[2012-05-15 18:38:09,373: INFO/PoolWorker-1] process exiting with exitcode 0 
[2012-05-15 18:38:09,376: INFO/MainProcess] process shutting down 
+0

Spotkałem ten sam problem –

Odpowiedz

1

Twój serwer rabbitmq nie może być poprawnie skonfigurowany i/lub skonfigurowany. Sprawdź, czy tak jest i spróbuj ponownie - lub, jeszcze lepiej, jeśli próbujesz po prostu przetestować coś i jesteś agnostykiem kolejkowym, wyjmij rabbitmq i zacznij używać redis. O wiele łatwiej jest skonfigurować.

po prostu wyciąć i wklejony kod z jednego z mojego projektu, i to działa dobrze:

import djcelery 
from datetime import timedelta 

djcelery.setup_loader() 


BROKER_BACKEND = "redis" 
BROKER_HOST = "localhost" 
BROKER_PORT = 6379 
BROKER_VHOST = "0" 

CELERYD_LOG_LEVEL = 'DEBUG' 
CELERY_RESULT_BACKEND = "redis" 
CELERY_TASK_RESULT_EXPIRES = 150000 
REDIS_HOST = "localhost" 
REDIS_PORT = 6379 
REDIS_DB = "0" 
CELERYD_CONCURRENCY = 1 
CELERYD_MAX_TASKS_PER_CHILD = 4 

CELERY_IMPORTS = (
    "apps.app1.tasks", 
    "apps.app2.tasks", 
) 
1

Co twoja BROKER_URL wyglądać w settings.py?

Domyślnie RabbitMQ ma gościem, więc jeśli można połączyć z

BROKER_URL = "amqp://guest:[email protected]:5672//" 

to problem jest twoje ustawienia dla RabbitMQs użytkownika, hasło, lub wirtualnego hosta.

12

Twój problem jest w BROKER_URL.

Z dodatkowym VHOST prawo config byłoby:

BROKER_URL='amqp://[email protected]:5672//' 
BROKER_VHOST='/celeryhost' 
+5

Ustawienie 'BROKER_VHOST' jest przestarzałe. Możesz ustawić 'VHOST' w zmiennej' BROKER_URL': 'BROKER_URL = 'amqp: // celeryuser @ localhost: 5672/celeryhost'' –

+1

dla mnie URL brokera działał tylko z podwójnym ukośnikiem przed vhostem: BROKER_URL =' amqp: // celeryuser @ localhost: 5672 // celeryhost ' –

4

Dla mnie następujący adres URL kończące pracował: ... @ localhost: 5672/celeryvhost

4

miałem podobny problem z RabbitMQ i problem polegał na tym, że mój użytkownik nie ma uprawnień do tworzenia wiadomości w RabbitMQ.

Spróbuj uruchomić następujący skrypt na serwerze RabbitMQ z gość użytkownika i jeśli tworzy zadanie spróbować z użytkownikiem:

from celery import Celery 

app = Celery('tasks', broker='amqp://radek:**@localhost:5672//') 

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

Jeśli masz ten sam błąd po prostu ustawić pozwolenie na prowadzenie użytkownik:

rabbitmqctl set_permissions -p/radek ".*" ".*" ".*" 
Powiązane problemy