2016-11-26 88 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

謝謝,我也沒有看明顯的! :) –

相關問題