2016-11-26 4 views
0

Ich führe Redis, Sellery 4.0 und Django 1.10, aber erhalten einen [Errrno 61] Verbindung verweigert Fehler beim Ausführen der Aufgabe 'Test' von Shell. Das ist meine Projektstruktur:Django Sellerie socket.error [Errno 61] Verbindung verweigert

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/local/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/local/__init__.py:

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

Ich denke etwas Hängt ist in dieser Init-Datei falsch, weil die Aufgabe von Shell läuft, wenn ich den Inhalt bewegen MyProj/myproj/__init__.py:

from __future__ import absolute_import, unicode_literals 

from .local.celery import app as celery_app 

__all__ = ['celery_app'] 

Sellerie läuft im myproj Verzeichnis mit dem Befehl:

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

Die voller Fehler:

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 

Antwort

0

Sie müssen die BROKER_URL so einstellen, dass sie auf REDIS zeigt.

Wenn Sie nur eine Warteschlange haben, vergewissern Sie sich, dass Ihr Mitarbeiter mit der Standardwarteschlange verbunden ist.

Wenn Sie Standard-Warteschlange in den Einstellungen festgelegt, müssen Sie Ihre Arbeiter, um Pickup Aufgabe zu stellen, wie unten:

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

+0

Die BROKER_URL ist korrekt eingestellt und es gibt nur eine Warteschlange. Mein Setup funktioniert, wenn ich die sellery.py-Datei aus ihrem Unterverzeichnis verschiebe. –

1

Yeah! Ich hab es geschafft! Ich hatte dasselbe Problem. In Datei 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') 

Dann wird, Sellerie in "app" initialisiert werden, und Config wird in "app", und Ihre Aufgabe wird verzögert geladen werden.

Aber es funktioniert nur, wenn Ihre Konfiguration gültig ist.

+0

Danke, ich habe auch nicht auf das Offensichtliche geschaut! :) –

Verwandte Themen