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. Я советую вам прочитать весь документ для получения дополнительной информации.