2009-12-10 40 views
4

我試圖按照celery tutorial,但當我運行python manage.py celeryd時遇到問題:RabbitMQ給出了「訪問被拒絕,登錄被拒絕用戶」錯誤:我的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'}} 

我仔細檢查我的用戶,權限和虛擬主機信息,他們似乎都匹配。任何幫助疑難解答非常感謝。

UPDATE:繼@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 

回答

5

你運行Django的? 如果是的話,那就試試這個:

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

它是否給了同樣的事情? 您確定要連接到正確的主機名,並且用戶名和密碼可以訪問虛擬主機嗎?

UPDATE:

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

UPDATE:您有正在c.connection前做上述情況,作爲連接在胡蘿蔔懶洋洋地建立起來。

+0

我正在運行Django。從Django shell執行上述操作會給我一個相當長的回溯並導致以下錯誤:'IOError:Socket closed'。我會用回溯更新問題。 – 2009-12-23 12:36:34

+1

好吧,在配置中必須有一些錯誤的東西,主機,虛擬主機,權限,用戶名,密碼等等。查看我的答案的更新以獲得更多故障排除 – asksol 2009-12-23 16:16:14

+0

謝謝。登錄信息錯誤:我在密碼設置中獲得了我的虛擬主機值。 – 2009-12-25 00:27:37