RabbitMQ restituisce l'errore "accesso rifiutato, accesso rifiutato per l'utente" quando si tenta di seguire il tutorial sul sedano
Domanda
Sto cercando di seguire il tutorial sul sedano, ma riscontro un problema quando corro python manage.py celeryd
:il mio server RabbitMQ (installato su una macchina virtuale sul mio dispositivo di sviluppo) non consente al mio utente di accedere.
Ottengo quanto segue sulla mia console di gestione Django:
[ERROR/MainProcess] AMQP Listener: Connection Error: Socket closed. Trying again in 2 seconds...
e questo appare nel mio rabbit.log
file sul mio server RabbitMQ:
exception on TCP connection <0.5814.0> from $DJANGO_BOX_IP
{channel0_error,starting,{amqp,access_refused,"login refused for user '$CONFIGURED_USER'",'connection.start_ok'}}
Ho ricontrollato le informazioni relative a utente, autorizzazioni e vhost e sembrano corrispondere tutte.Qualsiasi aiuto per la risoluzione dei problemi è molto apprezzato.
AGGIORNAMENTO:Seguendo il consiglio di @asksol ottengo il seguente traceback:
$MY_VIRTUAL_ENV/lib/python2.6/site-packages/carrot/connection.pyc in connection(self)
118 return
119 if not self._connection:
--> 120 self._connection = self._establish_connection()
121 self._closed = False
122 return self._connection
$MY_VIRTUAL_ENV/lib/python2.6/site-packages/carrot/connection.pyc in _establish_connection(self)
131
132 def _establish_connection(self):
--> 133 return self.create_backend().establish_connection()
134
135 def get_backend_cls(self):
$MY_VIRTUAL_ENV/lib/python2.6/site-packages/carrot/backends/pyamqplib.pyc in establish_connection(self)
110 insist=conninfo.insist,
111 ssl=conninfo.ssl,
--> 112 connect_timeout=conninfo.connect_timeout)
113
114 def close_connection(self, connection):
$MY_VIRTUAL_ENV/lib/python2.6/site-packages/amqplib/client_0_8/connection.pyc in __init__(self, host, userid, password, login_method, login_response, virtual_host, locale, client_properties, ssl, insist, connect_timeout, **kwargs)
138 self.wait(allowed_methods=[
139 (10, 20), # secure
--> 140 (10, 30), # tune
141 ])
142
$MY_VIRTUAL_ENV/lib/python2.6/site-packages/amqplib/client_0_8/abstract_channel.pyc in wait(self, allowed_methods)
88 method_sig, args, content = self.connection._wait_method(
---> 89 self.channel_id, allowed_methods)
90
91 if content \
$MY_VIRTUAL_ENV/lib/python2.6/site-packages/amqplib/client_0_8/connection.pyc in _wait_method(self, channel_id, allowed_methods)
196 while True:
197 channel, method_sig, args, content = \
--> 198 self.method_reader.read_method()
199
200 if (channel == channel_id) \
$MY_VIRTUAL_ENV/lib/python2.6/site-packages/amqplib/client_0_8/method_framing.pyc in read_method(self)
213 m = self.queue.get()
214 if isinstance(m, Exception):
--> 215 raise m
216 return m
217
IOError: Socket closed
Soluzione
Stai utilizzando Django?Se è così, prova questo:
>>> from carrot.connection import DjangoBrokerConnection
>>> c = DjangoBrokerConnection()
>>> c.connection
Dà la stessa cosa?Sei sicuro di connetterti al nome host corretto e che il nome utente e la password abbiano accesso all'host virtuale?
AGGIORNAMENTO:
>>> from carrot.connection import DjangoBrokerConnection
>>> c = DjangoBrokerConnection()
>>> for n in ("host", "userid", "password", "virtual_host", "ssl"):
... print("%s -> %s" % (n, repr(getattr(c, n, None))))
AGGIORNAMENTO:Devi fare quanto sopra prima di eseguire c.connection, poiché la connessione viene stabilita pigramente in carot.