Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CELERY_ALWAYS_EAGER seems to have no effect

Tags:

django

celery

I have a Django + Celery setup working correctly in production with RabbitMQ.

AFAIK, it should be sufficient to set CELERY_ALWAYS_EAGER to True in django settings locally, to avoid setting up RabbitMQ for development. I have done this but when calling .delay() on a task I get:

Traceback (most recent call last):
  File "lib/python2.7/site-packages/django/core/handlers/base.py", line 132, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "lib/python2.7/site-packages/django/views/generic/base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "lib/python2.7/site-packages/django/views/generic/base.py", line 89, in dispatch
    return handler(request, *args, **kwargs)
  File "lib/python2.7/site-packages/django/views/generic/edit.py", line 215, in post
    return self.form_valid(form)
  File "app/web/views.py", line 188, in form_valid
    form.send_email()
  File "app/web/forms.py", line 17, in send_email
    send_email.delay(mail, recipients, 'Contact %s' % name, comment)
  File "lib/python2.7/site-packages/celery/app/task.py", line 453, in delay
    return self.apply_async(args, kwargs)
  File "lib/python2.7/site-packages/celery/app/task.py", line 559, in apply_async
    **dict(self._get_exec_options(), **options)
  File "lib/python2.7/site-packages/celery/app/base.py", line 353, in send_task
    reply_to=reply_to or self.oid, **options
  File "lib/python2.7/site-packages/celery/app/amqp.py", line 305, in publish_task
    **kwargs
  File "lib/python2.7/site-packages/kombu/messaging.py", line 172, in publish
    routing_key, mandatory, immediate, exchange, declare)
  File "lib/python2.7/site-packages/kombu/connection.py", line 457, in _ensured
    interval_max)
  File "lib/python2.7/site-packages/kombu/connection.py", line 369, in ensure_connection
    interval_start, interval_step, interval_max, callback)
  File "lib/python2.7/site-packages/kombu/utils/__init__.py", line 243, in retry_over_time
    return fun(*args, **kwargs)
  File "lib/python2.7/site-packages/kombu/connection.py", line 237, in connect
    return self.connection
  File "lib/python2.7/site-packages/kombu/connection.py", line 741, in connection
    self._connection = self._establish_connection()
  File "lib/python2.7/site-packages/kombu/connection.py", line 696, in _establish_connection
    conn = self.transport.establish_connection()
  File "lib/python2.7/site-packages/kombu/transport/librabbitmq.py", line 123, in establish_connection
    conn = self.Connection(**opts)
  File "lib/python2.7/site-packages/librabbitmq/__init__.py", line 199, in __init__
    self.connect()
ConnectionError: Error opening socket: a socket error occurred
like image 702
Luca Corti Avatar asked May 03 '15 17:05

Luca Corti


People also ask

What is celery eager?

Eager mode. The eager mode enabled by the task_always_eager setting is by definition not suitable for unit tests. When testing with eager mode you are only testing an emulation of what happens in a worker, and there are many discrepancies between the emulation and what happens in reality.


1 Answers

For the record, since celery 4.0 this setting has been renamed to task_always_eager:

# setting renamed on celery 4.0
CELERY_ALWAYS_EAGER --> task_always_eager

To help the migration to this version, Celery provides the following util to update automatically your settings:

# --django allows to keep uppercase settings and CELERY_ prefix
$ celery upgrade settings proj/settings.py --django
like image 180
slamora Avatar answered Oct 14 '22 10:10

slamora