2012-07-31 93 views
0

我想跟随文档开始使用芹菜,但遇到难以调试示例代码的问题。我不知道我是否遇到了同样问题的两面,或两个独特的问题。我可以通过shell连接到SQS队列,但不能与django连接。我不知道这种行为与导入Celery和导入任务的问题之间有什么关系。芹菜进口和SQS连接问题

的“入门”指南在这里: http://celery.github.com/celery/getting-started/first-steps-with-celery.html#running-the-celery-worker-server

显示代码

from celery import Celery 

此代码的工作,如果我从一个Python shell中运行它,但是,如果我这样做,我的Django项目内在eclipse中的tasks.py中,我得到一个错误Unresolved Import:Celery。

这里有一个单独的指南:http://celery.github.com/celery/django/first-steps-with-django.html Django的,这反而使用

from celery import task 

但是它解决了罚款,当我继续教程,并呼吁

add.delay(2, 2) 

我得到一个连接失败,它看起来也许它试图仍然使用rabbitmq而不是SQS我有我的django项目设置使用(这可以工作,我可以从亚马逊的web界面看到SQS队列,并且如果我做了所有事情我可以建立连接从使用ce的外壳莱利进口芹菜)。这里是堆栈跟踪如果是相关的:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/celery/app/task.py", line 343, in delay 
    return self.apply_async(args, kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/celery/app/task.py", line 458, in apply_async 
    with app.producer_or_acquire(producer) as P: 
    File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__ 
    return self.gen.next() 
    File "/usr/local/lib/python2.7/dist-packages/celery/app/base.py", line 247, in producer_or_acquire 
    with self.amqp.producer_pool.acquire(block=True) as producer: 
    File "/usr/local/lib/python2.7/dist-packages/kombu/connection.py", line 705, in acquire 
    R = self.prepare(R) 
    File "/usr/local/lib/python2.7/dist-packages/kombu/pools.py", line 54, in prepare 
    p = p() 
    File "/usr/local/lib/python2.7/dist-packages/kombu/pools.py", line 45, in <lambda> 
    return lambda: self.create_producer() 
    File "/usr/local/lib/python2.7/dist-packages/kombu/pools.py", line 42, in create_producer 
    return self.Producer(self._acquire_connection()) 
    File "/usr/local/lib/python2.7/dist-packages/celery/app/amqp.py", line 160, in __init__ 
    super(TaskProducer, self).__init__(channel, exchange, *args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/kombu/messaging.py", line 83, in __init__ 
    self.revive(self.channel) 
    File "/usr/local/lib/python2.7/dist-packages/kombu/messaging.py", line 174, in revive 
    channel = self.channel = maybe_channel(channel) 
    File "/usr/local/lib/python2.7/dist-packages/kombu/connection.py", line 879, in maybe_channel 
    return channel.default_channel 
    File "/usr/local/lib/python2.7/dist-packages/kombu/connection.py", line 617, in default_channel 
    self.connection 
    File "/usr/local/lib/python2.7/dist-packages/kombu/connection.py", line 610, in connection 
    self._connection = self._establish_connection() 
    File "/usr/local/lib/python2.7/dist-packages/kombu/connection.py", line 569, in _establish_connection 
    conn = self.transport.establish_connection() 
    File "/usr/local/lib/python2.7/dist-packages/kombu/transport/amqplib.py", line 279, in establish_connection 
    connect_timeout=conninfo.connect_timeout) 
    File "/usr/local/lib/python2.7/dist-packages/kombu/transport/amqplib.py", line 90, in __init__ 
    super(Connection, self).__init__(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/amqplib/client_0_8/connection.py", line 129, in __init__ 
    self.transport = create_transport(host, connect_timeout, ssl) 
    File "/usr/local/lib/python2.7/dist-packages/amqplib/client_0_8/transport.py", line 281, in create_transport 
    return TCPTransport(host, connect_timeout) 
    File "/usr/local/lib/python2.7/dist-packages/amqplib/client_0_8/transport.py", line 85, in __init__ 
    raise socket.error, msg 
socket.error: [Errno 111] Connection refused 

在settings.py,我已在BROKER_URL正确地与我的SQS网址配置(没有向前秘典,这显然已经在过去的一个问题斜杠)。

所以

  1. 为什么“芹菜芹菜进口的”从Python Shell中的工作,而不是在Django项目日食?
  2. 为什么按照django教程中的指示导致连接拒绝错误(并且amqplib引用是否意味着它试图使用rabbitmq而不是SQS)?

回答

1

你如何称呼任务,你使用manage.py shell

您是否将import djcelery; djcelery.setup_loader()添加到您的settings.py的顶部?

芹菜和django-芹菜的API现在有所不同,因为django-芹菜落后。 Celery 3.1将支持Django开箱即用,因此新的API可以在任何地方使用。

在日食的事情很有趣。 Eclipse是否有可能使用静态分析来查找模块中的符号?在这种情况下,它有助于添加以下芹菜/ 初始化 .py文件:

__all__ = ['Celery'] 

+0

我从一个普通的python shell运行,而不是从manage.py shell启动,它解释了连接错误。导入问题似乎是Eclipse的一个问题,仍在研究它。 – Tango 2012-08-01 16:09:32

+0

我在芹菜中添加了虚拟符号,你可以试试看看它是否修复了Eclipse问题?尝试:'pip安装-U http://github.com/celery/celery/zipball/master' – asksol 2012-08-01 16:49:18

+0

安装虚拟符号起作用,Eclipse不再报告任何错误。 – Tango 2012-08-03 19:33:48