Django celery .delay() в запросах застревает
У меня есть проект, запущенный на 3 разных окружениях, на 2 окружениях он работает, на production по какой-то причине перестал работать (раньше работал).
Код довольно прост У меня есть представление, которое запускает задачу с задержкой и должно немедленно вернуть некоторое сообщение пользователю:
class PrintTaskView(View):
def get(self, request):
logger.debug('ABOUT TO ADD A TASK')
tasks.print_task.delay()
logger.debug('TASK WAS ADDED')
messages.info(request, _('Print task added to queue'))
return HttpResponseRedirect(reverse_lazy('admin:index'))
Я в замешательстве, потому что это работает гладко на моей локальной машине и в тестовой среде, в то время как на производстве запрос застревает на загрузке после выполнения первого журнала. Еще больше меня смущает то, что если я запускаю код из оболочки (оболочка manage.py), то задача печати создается, подхватывается рабочим и выполняется. Также задачи celery beat выполняются без проблем.
Мои настройки сельдерея:
# Celery
CELERY_BROKER_URL = os.getenv('CELERY_BROKER_URL')
CELERY_RESULT_BACKEND = os.getenv('CELERY_RESULT_BACKEND')
CELERY_BEAT_SCHEDULE = {
...
}
website/__init__.py
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ('celery_app',)
celery.py
from __future__ import absolute_import
from celery import Celery
from django.conf import settings
app = Celery('somename')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, related_name='tasks')
Любая идея или предложение более чем приветствуется :)
Я случайно обнаружил, что в подключении к Redis в библиотеке celery или где-то рядом с ней есть ошибка, и вы фактически не получаете никакой ошибки, когда учетные данные неверны при доступе к Redis. Кто-то на сервере удалил переменные credential env, поэтому приложение не смогло подключиться к Redis, и ошибка не была возвращена. В то время как на виртуальном env, где они у меня были, я смог подключиться, и там все шло гладко.
Обратите внимание, если у вас возникла такая же проблема, убедитесь, что ваши учетные данные для доступа к Redis настроены правильно.