OperationalError, Ошибка 111 при подключении к 127.0.0.1:6379. Отказано в подключении. После развертывания в heroku

Я получаю следующую ошибку после развертывания моего сайта на heroku.

Error 111 connecting to 127.0.0.1:6379. Connection refused.
Request Method: POST
Request URL:    https://website.herokuapp.com/account/register
Django Version: 3.2.8
Exception Type: OperationalError
Exception Value:    
Error 111 connecting to 127.0.0.1:6379. Connection refused.
Exception Location: /app/.heroku/python/lib/python3.8/site-packages/kombu/connection.py, line 451, in _reraise_as_library_errors
Python Executable:  /app/.heroku/python/bin/python
Python Version: 3.8.12
Python Path:    
['/app',
 '/app/.heroku/python/bin',
 '/app',
 '/app/.heroku/python/lib/python38.zip',
 '/app/.heroku/python/lib/python3.8',
 '/app/.heroku/python/lib/python3.8/lib-dynload',
 '/app/.heroku/python/lib/python3.8/site-packages']
Server time:    Sat, 11 Dec 2021 21:17:12 +0530

По сути, мой сайт должен отправлять электронную почту относительно otp, после регистрации, а также некоторые письма, связанные с контрактом. Эти письма необходимо отправлять, поэтому их нельзя избежать. Ранее я уже задавал вопрос о том, как минимизировать время отправки писем, чтобы пользователю не приходилось ждать все время. Мне посоветовали использовать для этого асинхронный код. Поэтому я решил использовать для этого celery. Я следовал видео на youtube, которое учило, как его использовать.

Теперь, после того как я ввел код на сайт, я получаю эту ошибку. Я новичок и не знаю, как ее устранить. Пожалуйста, подскажите, что мне делать. Ниже приведены детали и конфигурации.

settings.py


CELERY_BROKER_URL = 'redis://127.0.0.1:6379'
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379'
CELERY_ACCEPT_CONTENT =['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SELERLIZER = 'json'

requirements.txt

amqp==5.0.6
asgiref==3.4.1
billiard==3.6.4.0
celery==5.2.1
click==8.0.3
click-didyoumean==0.3.0
click-plugins==1.1.1
click-repl==0.2.0
colorama==0.4.4
Deprecated==1.2.13
dj-database-url==0.5.0
Django==3.2.8
django-ckeditor==6.1.0
django-filter==21.1
django-js-asset==1.2.2
django-multiselectfield==0.1.12
dnspython==2.1.0

Поскольку я упомянул, что я начинающий, пожалуйста, предложите мне подробный ответ, как я могу исправить эту ошибку.

Вот в чем проблема:

CELERY_BROKER_URL = 'redis://127.0.0.1:6379'

Redis не будет работать на вашем локальном dyno. Вам придется запустить его в другом месте и настроить свой код для подключения к нему. Обычно Redis запускается через аддон:

Выбрав брокера, создайте свое приложение Heroku и подключите к нему дополнение. В примерах мы будем использовать Heroku Redis в качестве провайдера Redis, но существует множество других провайдеров Redis в Heroku Elements Marketplace.

Если вы решили использовать Heroku Redis, вы сможете получить строку подключения к вашему экземпляру через REDIS_URL переменную окружения :

Дополнения Heroku предоставляют вашему приложению переменные окружения, которые могут быть переданы вашему приложению Celery. Например:

import os
app.conf.update(BROKER_URL=os.environ['REDIS_URL'],
                CELERY_RESULT_BACKEND=os.environ['REDIS_URL'])

Теперь ваше приложение Celery знает, что нужно использовать выбранного вами брокера и хранилище результатов для всех задач, которые вы в нем определили.

Другие аддоны будут предоставлять аналогичные механизмы настройки.

Вся цитируемая здесь документация и большинство ссылок взяты из статьи Heroku Using Celery on Heroku. Я советую вам прочитать весь документ для получения дополнительной информации.

Вернуться на верх