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.

Desplegando Django ASGI en Heroku

No puedo implementar Django ASGI en Heroku. La compilación es exitosa, pero muestra un error de aplicación después de la implementación.

Procfile:

web: daphne quickmeals.asgi:application --port $PORT --bind 0.0.0.0 -v2
worker: python manage.py runworker channel_layers --settings=quickmeals.settings -v2

aspi.py

import os

import django
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'quickmeals.settings')

from quickmeals.routing import ws_patterns
from channels.auth import AuthMiddlewareStack


application = ProtocolTypeRouter(
{   'http':get_asgi_application(),
    'websocket': AuthMiddlewareStack( URLRouter(ws_patterns)
})

Routing.py

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from django.urls import path
from . import consumers

ws_patterns = [
path('test',consumers.TestConsumer.as_asgi()),
path('orderUpdate/<str:id>',consumers.orderUpdate.as_asgi()),
path('<str:uid>',consumers.OrderProgress.as_asgi())
]

Settings.py

ASGI_APPLICATION = 'quickmeals.asgi.application'
CHANNEL_LAYERS = {
"default": {
    "BACKEND": "channels_redis.core.RedisChannelLayer",
    "CONFIG": {
        "hosts": [os.environ.get('REDIS_URL', 'redis://localhost:6379')],
    },
},

}

Además, no tengo complementos en Heroku.

Por favor, ayúdame a cómo puedo implementarlo en Heroku.
Cualquier consejo sería muy apreciado. Gracias de antemano.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Según la información proporcionada, parece que el problema con la implementación de la aplicación ASGI Django en Heroku podría deberse a la ausencia del complemento Heroku Redis.

    Estás utilizando la capa de canal Redis para canales, que requiere Redis para funcionar, y tu código especifica Redis en la máquina local. Sin embargo, Heroku utiliza un método diferente para definir y acceder a las variables de entorno, lo que significa que es probable que la variable de entorno ‘REDIS_URL’ no esté definida.

    Para resolver este problema, puedes intentar agregar el complemento Heroku Redis a tu aplicación. Esto debería establecer la variable de entorno ‘REDIS_URL’, que es requerida por la capa de canal Redis.

    Para agregar el complemento Heroku Redis, ejecuta el siguiente comando:

    heroku addons:create heroku-redis
    

    Después de agregar el complemento, la variable de entorno ‘REDIS_URL’ debería establecerse automáticamente por Heroku. Luego puedes actualizar tu código para usar esta variable:

    # Settings.py
    import os
    
    ASGI_APPLICATION = 'quickmeals.asgi.application'
    CHANNEL_LAYERS = {
        "default": {
            "BACKEND": "channels_redis.core.RedisChannelLayer",
            "CONFIG": {
                "hosts": [os.environ.get('REDIS_URL', 'redis://localhost:6379')],
            },
        },
    }
    

    Con esta configuración, Heroku debería poder ejecutar tu aplicación ASGI Django correctamente.

    Si el problema persiste, es posible que desees revisar los registros de Heroku en busca de mensajes de error que puedan ayudarte a diagnosticar el problema. Puedes ver los registros utilizando el siguiente comando:

    heroku logs --tail
    

    Esto debería proporcionar más información sobre el error de aplicación que estás encontrando.

Comments are closed.