es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

OperationalError, Error 111 al conectar con 127.0.0.1:6379. Conexión rechazada. Después de desplegar en heroku.

Obtengo el siguiente error después de implementar mi sitio web en Heroku.

OperationalError at /account/register
Error 111 al conectarse a 127.0.0.1:6379. Conexión rechazada.
Método de solicitud: POST
URL de solicitud: https://website.herokuapp.com/account/register
Versión de Django: 3.2.8
Tipo de excepción: OperationalError
Valor de la excepción:<br>
Error 111 al conectarse a 127.0.0.1:6379. Conexión rechazada.
Ubicación de la excepción: /app/.heroku/python/lib/python3.8/site-packages/kombu/connection.py, línea 451, en <em>reraise</em>as<em>library</em>errors
Ejecutable de Python: /app/.heroku/python/bin/python
Versión de Python: 3.8.12
Ruta de Python:<br>
['/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']
Hora del servidor: Sábado, 11 de diciembre de 2021 21:17:12 +0530

Básicamente, mi sitio web tiene que enviar correos electrónicos relacionados con un código único (OTP) después del registro y también algunos correos electrónicos relacionados con contratos. Estos correos electrónicos son necesarios y no se pueden evitar. Publicué una pregunta anteriormente aquí sobre cómo minimizar el tiempo que lleva enviar correos electrónicos para que el usuario no tenga que esperar todo el tiempo. Me sugirieron usar código asíncrono para esto. Así que decidí usar Celery. Seguí un vídeo de YouTube que enseñaba cómo usarlo.

Ahora, después de hacer push del código en el sitio web, obtengo este error. Soy principiante y no tengo idea de cómo corregirlo. Por favor, sugiéranme qué debo hacer. A continuación se detallan los detalles y las configuraciones.

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_SERIALIZER = '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

Como mencioné, soy principiante. Por favor, sugiéranme una respuesta detallada sobre cómo puedo corregir este error.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que hay un problema de conexión con Redis, que es el broker de mensajes usado por Celery para manejar tareas asíncronas. Específicamente, dice que hubo un error al conectar a 127.0.0.1:6379, que es la dirección y puerto predeterminados de Redis.

    La razón de este error es que Heroku no proporciona una instancia de Redis por defecto, por lo que necesitas configurar Redis para tu aplicación de Heroku o usar otro broker de mensajes.

    Para configurar Redis, puedes usar un complemento proporcionado por Heroku, como Heroku Redis o Redis To Go. Estos complementos te proporcionarán una instancia de Redis y una URL de conexión que puedes usar para conectarte a ella.

    Una vez que tengas una instancia de Redis, debes actualizar tu archivo settings.py para usar la URL de conexión correcta para Celery. Reemplaza la siguiente línea:

    CELERY_BROKER_URL = 'redis://127.0.0.1:6379'

    por:

    CELERY_BROKER_URL = '<url-de-conexión-redis>'

    donde <url-de-conexión-redis> es la URL de conexión proporcionada por tu complemento de Redis.

    Si prefieres no usar Redis, puedes usar otro broker de mensajes como RabbitMQ, que también es compatible con Celery. Para usar RabbitMQ, necesitas instalar el paquete celery[librabbitmq] y actualizar tu configuración de Celery en settings.py de la siguiente manera:

    CELERY_BROKER_URL = 'amqp://<usuario>:<contraseña>@<host>/<vhost>'

    donde <usuario> y <contraseña> son tus credenciales de RabbitMQ, <host> es el host de RabbitMQ, y <vhost> es el nombre del virtual host.

    Finalmente, después de hacer cambios en tu archivo settings.py, asegúrate de volver a implementar tu aplicación en Heroku para que los cambios surtan efecto.</contraseña></contraseña></url-de-conexión-redis></url-de-conexión-redis>

Comments are closed.