gpt4 book ai didi

Django 现在在 Heroku 中与 ASGI + WSGI 合作

转载 作者:可可西里 更新时间:2023-11-01 11:23:29 24 4
gpt4 key购买 nike

我正在尝试使用 Channels (V.2) 设置 Django + Heroku 应用程序。我试图按照所有教程进行操作,但其中大部分都没有更新。应用程序必须对 HTTP 请求使用 WSGI,对 websockets 请求使用 ASGI。到目前为止,我发现它几乎可以正常工作,最后遗漏的部分是让 web 应用程序可见的 websockets 端点。此时每当我尝试创建一个新的 websocket 时:

Error during WebSocket handshake: Unexpected response code: 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),
]),
})

最佳答案

您应该运行 ASGI 应用程序,而不是 channel 层。您的 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

查看文档 deployment page了解更多详情

关于Django 现在在 Heroku 中与 ASGI + WSGI 合作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56385774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com