【发布时间】:2019-10-16 13:17:35
【问题描述】:
我正在尝试使用 Channels (V.2) 设置 Django + Heroku 应用程序。 我尝试按照所有教程进行操作,但其中大多数都没有更新。 应用程序必须对 HTTP 请求使用 WSGI,对 websockets 请求使用 ASGI。 到目前为止,我发现它几乎可以正常工作,最后缺少的部分是 websockets 端点对 web 应用程序可见。 此时每当我尝试创建一个新的 websocket 时:
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
这是asgi:
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),
]),
})
【问题讨论】:
标签: django postgresql heroku redis django-channels