2016-11-26 92 views
0

我正在运行Redis,Celery 4.0和Django 1.10,但在从sh​​ell运行任务'test'时收到[Errrno 61]连接拒绝错误。这是我的项目结构:Django芹菜socket.error [Errno 61]连接拒绝

myproj 
│ 
├── app1 
   ├── __init__.py 
    ├── tasks.py 
    myproj 
    ├── __init__.py 
    ├── urls.py 
    ├── settings 
    │   ├── __init__.py 
    │   ├── base.py 
    │   ├── local.py 
    ├── local 
    │   ├── __init__.py 
    │   ├── celery.py 
    │   ├── wsgi.py 

的Myproj/APP1/tasks.py:

from __future__ import absolute_import 
from celery import task 

@task(name='app1.tasks.test') 
def test(): 
    print('this is a test') 

的Myproj /的Myproj /本地/ celery.py:

from __future__ import absolute_import 
import os 
from celery import Celery 

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproj.settings.local') 
app = Celery('myproj_local') 

app.config_from_object('django.conf:settings') 
app.autodiscover_tasks() 

的Myproj /的Myproj /本地/ __init__.py

from __future__ import absolute_import, unicode_literals 
from .celery import app as celery_app 
__all__ = ['celery_app'] 

我觉得有点兴是错在这个初始化文件,因为该任务从壳运行,当我移动到的Myproj内容/的Myproj/__init__.py

from __future__ import absolute_import, unicode_literals 

from .local.celery import app as celery_app 

__all__ = ['celery_app'] 

芹菜中的Myproj目录中运行带有命令:

celery -A myproj.local.celery worker -l info 

的全错误:

python manage.py shell --settings=myproj.settings.local 
(InteractiveConsole) 
>>> from app1.tasks import test 
>>> test.delay() 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File env/lib/python2.7/site-packages/celery/app/task.py", line 413, in delay 
return self.apply_async(args, kwargs) 
    File env/lib/python2.7/site-packages/celery/app/task.py", line 536, in apply_async 
**options 
    File env/lib/python2.7/site-packages/celery/app/base.py", line 717, in send_task 
amqp.send_task_message(P, name, message, **options) 
    File env/lib/python2.7/site-packages/celery/app/amqp.py", line 554, in send_task_message 
**properties 
    File env/lib/python2.7/site-packages/kombu/messaging.py", line 178, in publish 
exchange_name, declare, 
File env/lib/python2.7/site-packages/kombu/connection.py", line 527, in _ensured 
errback and errback(exc, 0) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.py", line 35, in __exit__ 
self.gen.throw(type, value, traceback) 
    File env/lib/python2.7/site-packages/kombu/connection.py", line 419, in _reraise_as_library_errors 
sys.exc_info()[2]) 
    File env/lib/python2.7/site-packages/kombu/connection.py", line 414, in _reraise_as_library_errors 
yield 
    File env/lib/python2.7/site-packages/kombu/connection.py", line 515, in _ensured 
reraise_as_library_errors=False, 
    File env/lib/python2.7/site-packages/kombu/connection.py", line 405, in ensure_connection 
callback) 
    File env/lib/python2.7/site-packages/kombu/utils/functional.py", line 333, in retry_over_time 
return fun(*args, **kwargs) 
    File env/lib/python2.7/site-packages/kombu/connection.py", line 261, in connect 
return self.connection 
    File env/lib/python2.7/site-packages/kombu/connection.py", line 802, in connection 
self._connection = self._establish_connection() 
    File env/lib/python2.7/site-packages/kombu/connection.py", line 757, in _establish_connection 
conn = self.transport.establish_connection() 
    File env/lib/python2.7/site-packages/kombu/transport/pyamqp.py", line 130, in establish_connection 
conn.connect() 
    File env/lib/python2.7/site-packages/amqp/connection.py", line 294, in connect 
self.transport.connect() 
    File env/lib/python2.7/site-packages/amqp/transport.py", line 103, in connect 
self._connect(self.host, self.port, self.connect_timeout) 
    File env/lib/python2.7/site-packages/amqp/transport.py", line 144, in _connect 
self.sock.connect(sa) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 228, in meth 
return getattr(self._sock,name)(*args) 
OperationalError: [Errno 61] Connection refused 

回答

0

您需要设置BROKER_URL指向REDIS。

如果您只有一个队列,请确保您的工作人员已连接到默认队列。

如果您指定的默认队列设置,你需要你的工人设置如下皮卡任务:

celery -A myproj.local.celery worker -l info -Q queue_name

+0

BROKER_URL设置正确,只有一个队列。当我将celery.py文件从其子目录中移出时,我的设置工作正常。 –

1

呀!我知道了!我有同样的问题。 在文件的Myproj/APP1/tasks.py:

from __future__ import absolute_import 
from celery import task 
app = Celery('myproj_local') 
app.config_from_object('django.conf:settings') 
@app.task(name='random_name') 
def test(): 
    print('this is a test') 

然后,芹菜将在“应用程序”进行初始化,和配置将在“应用程序”被加载,你的任务将被延迟。

但它只会在你的配置有效时才起作用。

+0

谢谢,我也没有看明显的! :) –

相关问题