2014-07-04 28 views
8

Si verifica un problema durante l'esecuzione dei comandi celery status o celery purge.Errno 111 Connessione rifiutata quando si utilizza Celery con SQS

File "/usr/bin/celery", line 11, in <module> 
    sys.exit(main()) 
    File "/usr/lib/python2.7/site-packages/celery/__main__.py", line 30, in main 
    main() 
    File "/usr/lib/python2.7/site-packages/celery/bin/celery.py", line 81, in main 
    cmd.execute_from_commandline(argv) 
    File "/usr/lib/python2.7/site-packages/celery/bin/celery.py", line 769, in execute_from_commandline 
    super(CeleryCommand, self).execute_from_commandline(argv))) 
    File "/usr/lib/python2.7/site-packages/celery/bin/base.py", line 306, in execute_from_commandline 
    return self.handle_argv(self.prog_name, argv[1:]) 
    File "/usr/lib/python2.7/site-packages/celery/bin/celery.py", line 761, in handle_argv 
    return self.execute(command, argv) 
    File "/usr/lib/python2.7/site-packages/celery/bin/celery.py", line 693, in execute 
    ).run_from_argv(self.prog_name, argv[1:], command=argv[0]) 
    File "/usr/lib/python2.7/site-packages/celery/bin/base.py", line 310, in run_from_argv 
    sys.argv if argv is None else argv, command) 
    File "/usr/lib/python2.7/site-packages/celery/bin/base.py", line 372, in handle_argv 
    return self(*args, **options) 
    File "/usr/lib/python2.7/site-packages/celery/bin/base.py", line 269, in __call__ 
    ret = self.run(*args, **kwargs) 
    File "/usr/lib/python2.7/site-packages/celery/bin/celery.py", line 472, in run 
    replies = I.run('ping', **kwargs) 
    File "/usr/lib/python2.7/site-packages/celery/bin/celery.py", line 324, in run 
    return self.do_call_method(args, **kwargs) 
    File "/usr/lib/python2.7/site-packages/celery/bin/celery.py", line 346, in do_call_method 
    callback=self.say_remote_command_reply) 
    File "/usr/lib/python2.7/site-packages/celery/bin/celery.py", line 385, in call 
    return getattr(i, method)(*args) 
    File "/usr/lib/python2.7/site-packages/celery/app/control.py", line 99, in ping 
    return self._request('ping') 
    File "/usr/lib/python2.7/site-packages/celery/app/control.py", line 70, in _request 
    timeout=self.timeout, reply=True, 
    File "/usr/lib/python2.7/site-packages/celery/app/control.py", line 306, in broadcast 
    limit, callback, channel=channel, 
    File "/usr/lib/python2.7/site-packages/kombu/pidbox.py", line 283, in _broadcast 
    chan = channel or self.connection.default_channel 
    File "/usr/lib/python2.7/site-packages/kombu/connection.py", line 755, in default_channel 
    self.connection 
    File "/usr/lib/python2.7/site-packages/kombu/connection.py", line 740, in connection 
    self._connection = self._establish_connection() 
    File "/usr/lib/python2.7/site-packages/kombu/connection.py", line 695, in _establish_connection 
    conn = self.transport.establish_connection() 
    File "/usr/lib/python2.7/site-packages/kombu/transport/pyamqp.py", line 112, in establish_connection 
    conn = self.Connection(**opts) 
    File "/usr/lib/python2.7/site-packages/amqp/connection.py", line 165, in __init__ 
    self.transport = create_transport(host, connect_timeout, ssl) 
    File "/usr/lib/python2.7/site-packages/amqp/transport.py", line 294, in create_transport 
    return TCPTransport(host, connect_timeout) 
    File "/usr/lib/python2.7/site-packages/amqp/transport.py", line 95, in __init__ 
    raise socket.error(last_err) 
socket.error: [Errno 111] Connection refused 

Sto utilizzando SQS BROKER_URL. Le attività stanno funzionando bene, ma quando voglio eliminare le attività su una coda (celery purge -f), ottengo l'errore di cui sopra.

software -> celery:3.1.11 (Cipater) kombu:3.0.18 py:2.7.5 
      billiard:3.3.0.17 py-amqp:1.4.5 
platform -> system:Linux arch:64bit, ELF imp:CPython 
loader -> celery.loaders.default.Loader 
settings -> transport:amqp results:disabled 

Il mio server è dotato di porte 22, 80, 443, 8000 porte aperte e ci sono tonnellate di messaggi nella coda SQS celery, in modo che il collegamento tra il sedano e SQS dovrebbe andare bene.

risposta

10

In base a documentation of the commands status and purge è necessario fornire il sedano con l'app di sedano a cui si riferisce in modo che sappia quale broker utilizzare. Semplicemente digitando $celery purge o digitando $celery status, il sedano non sa quale app di celery hai scelto come target e quindi fallisce.

Quindi, vai al tuo sedano app

$cd /path/to/your/celery/app/directory

e quindi chiamare il sedano di spurgo sulla vostra applicazione. In questo esempio il mio directory ha celeryapp.py ei contenuti sono:

from config import config 
from celery import Celery 
celery_app = Celery('tasks', 
        backend=config.celery_backend_uri, 
        broker=config.celery_broker_uri) 
celery_app.conf.update(
    CELERY_IMPORTS=(
     'app.module_a.tasks', # we're not including our tasks here as 
     'app.module_b.tasks', # our tasks are in other files listed here 
    ) 
) 

il contenuto non è così importante come il nostro appello, ma vengono forniti per dimostrare che abbiamo la nostra applicazione sedano all'interno celeryapp.py così posso chiamare

$celery -A celeryapp status 
[email protected]: OK 
[email protected]: OK 

o

$celery -A celeryapp purge 
WARNING: This will remove all tasks from queue: celery. 
     There is no undo for this operation! 
(to skip this prompt use the -f option) 
Are you sure you want to delete all tasks (yes/NO)? yes 
No messages purged from 1 queue 

ho avuto un simile question here e Sol sembrano confermare che la produzione di sedano volontà questo errore se non viene fornita alcuna app affermando

Come saprebbe che tipo di trasporto di broker utilizzare se non si specifica la posizione dell'app?

Problemi correlati