RabbitMQ дает отказ в доступе, отказ в входе в систему из-за ошибки пользователя при попытке следовать учебнику по сельдерею

Я пытаюсь следовать руководству по сельдерею, но столкнулся с проблемой когда я запускаю python manage.py celeryd: мой сервер RabbitMQ (установленный на виртуальной машине в моем окне разработки) не позволяет моему пользователю войти в систему.

Я получаю следующее в своей консоли управления Django:

[ERROR/MainProcess] AMQP Listener: Connection Error: Socket closed. Trying again in 2 seconds...

и это отображается в моем файле rabbit.log на моем сервере 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'}}

Я дважды проверил своего пользователя, разрешения и информацию о виртуальном хосте, и все они, похоже, совпадают. Любая помощь в устранении неполадок приветствуется.

ОБНОВЛЕНИЕ: следуя совету @asksol, я получаю следующую трассировку:

$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

person Hank Gay    schedule 10.12.2009    source источник


Ответы (1)


Вы используете джанго? Если да, то попробуйте это:

>>> from carrot.connection import DjangoBrokerConnection
>>> c = DjangoBrokerConnection()
>>> c.connection

Это дает то же самое? Вы уверены, что подключаетесь к правильному имени хоста и что имя пользователя и пароль имеют доступ к виртуальному хосту?

ОБНОВИТЬ:

>>> 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))))

ОБНОВЛЕНИЕ: Вы должны сделать это перед запуском c.connection, так как соединение устанавливается лениво в моркови.

person asksol    schedule 22.12.2009
comment
Я запускаю Джанго. Выполнение вышеуказанного из оболочки Django дает мне довольно длинную трассировку и приводит к следующей ошибке: IOError: Socket closed. Я обновлю вопрос с трассировкой. - person Hank Gay; 23.12.2009
comment
Хорошо, должно быть что-то не так в конфигурации, хост, виртуальный хост, разрешения, имя пользователя, пароль и так далее. Смотрите обновления к моему ответу для получения дополнительных сведений об устранении неполадок. - person asksol; 23.12.2009
comment
Спасибо. Информация для входа была неправильной: я получил значение своего виртуального хоста в настройках пароля. - person Hank Gay; 25.12.2009