Джанго теперь работает с каналами ASGI + WSGI в Heroku. - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь настроить приложение Django + Heroku с каналами (V.2).Я пытался следовать всем учебникам, но большинство из них не обновляются.Приложение должно использовать WSGI для HTTP-запроса и ASGI для запросов веб-сокетов.До сих пор я обнаружил, что это почти работает, последний недостающий фрагмент - это чтобы конечные точки websockets были видны для веб-приложения.На этом этапе всякий раз, когда я пытаюсь создать новый веб-сокет:

Ошибка во время рукопожатия WebSocket: Неожиданный код ответа: 404

Вот настройки:

ASGI_APPLICATION = 'app_xxx.routing.application'
ASGI_THREADS = 5
WSGI_APPLICATION = 'app_xxx.wsgi.application'

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            'hosts': [os.environ.get('REDIS_URL')],
        },
    },
}

Вот этот Procfile:

web: gunicorn app_xxx.wsgi --log-file -
web2: daphne app_xxx.asgi:channel_layer --port $PORT --bind 0.0.0.0 -v2
worker: python manage.py runworker channel_layer -v2

Вот аси:

import os
from channels.layers import get_channel_layer

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app_xxx.settings")
channel_layer = get_channel_layer()

Вот маршрут:

from channels.routing import ProtocolTypeRouter, URLRouter, ChannelNameRouter
from django.urls import path
from apps.booking.consumers import BookingConsumer

application = ProtocolTypeRouter({
    "websocket": URLRouter([
        path('ws/booking_review/<room_name>', BookingConsumer),
    ]),
})

1 Ответ

0 голосов
/ 03 июня 2019

Вы должны запустить приложение ASGI, а не канальный слой. Ваша настройка ASGI_APPLICATION должна указывать на routing.py, или вы можете переместить ее содержимое на asgi.py и указать на нее. С вашей текущей конфигурацией ваш Procfile должен выглядеть так:

web: gunicorn app_xxx.wsgi --log-file -
web2: daphne app_xxx.routing:application --port $PORT --bind 0.0.0.0 -v2
worker: python manage.py runworker channel_layer -v2

Проверьте документацию Страница развертывания для получения более подробной информации

...