2016-11-26 11 views
0

Redis、Celery 4.0、Django 1.10を実行していますが、シェルからタスク 'test'を実行しているときに[Errrno 61]接続が拒否されました。Django Celery socket.error [Errno 61] Connection refused

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'] 

私はsometと思う私は/にmyproj/__init__.pyをMYPROJするコンテンツを移動すると、タスクがシェルから実行されるため、興は、この初期化ファイルで間違っている:

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

REDISを指すようにBROKER_URLを設定する必要があります。

キューが1つしかない場合は、ワーカーがデフォルトキューに接続されていることを確認してください。

あなたの設定でデフォルトのキューを指定した場合、あなたは以下のようにピックアップタスクにワーカーを設定する必要があります。

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

+0

BROKER_URLが正しく設定されており、キューは1つだけです。 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') 

、セロリは、「アプリ」に初期化され、configが「アプリ」にロードされ、あなたのタスクが遅延されます。

ただし、設定が有効な場合にのみ動作します。

+0

ありがとう、私はあまりにも明らかに見ていない! :) –

関連する問題