DjangoRedis无法在windows或ubuntu产品上运行

cl25kdpy  于 2021-06-07  发布在  Redis
关注(0)|答案(0)|浏览(260)

我已经开发了django应用程序(我正在使用django rest框架),并且我正在尝试将websockets与来自django的channels&channels redis包集成。我跟随本教程和本视频教程,但我作出调整的基础上,前者在必要时。
我已经安装了

pip install channels
pip install channels-redis

但在我的windows操作系统上,redis似乎根本不适合我
在本地服务器上,我有以下配置:
设置.py

ASGI_APPLICATION = "mysite.asgi.application"
.
.
.

if config('CHANNEL_LAYERS') == 'redis':
  CHANNEL_LAYERS = {
    "default": {
      "BACKEND": "channels_redis.core.RedisChannelLayer",
      "CONFIG": {
        "hosts": [os.environ.get('REDIS_URL', 'redis://localhost:6379')],
      },
    },
  }
else:
  CHANNEL_LAYERS = {
    "default": {
      "BACKEND": "channels.layers.InMemoryChannelLayer",
    },
  }

asgi.py公司

import os
import django

from django.conf.urls import url
from django.core.asgi import get_asgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "trike.settings")

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter

# Models

from logistics.consumers import OrderConsumer
django.setup()

application = ProtocolTypeRouter({
    # Django's ASGI application to handle traditional HTTP requests
    "http": get_asgi_application(),

    "websocket": AuthMiddlewareStack(
      URLRouter([
        url(r"^order_update/$", OrderConsumer.as_asgi()),
      ])
    ),
})

订单.js

useEffect(() => {
    let wsStart = 'ws://'
    if (window.location.protocol === 'https:') {
      wsStart = 'wss://'
    }
    let endpoint = wsStart + window.location.host
    setSocket(new WebSocket(endpoint+'/order_update/'))
  }, []);

  useEffect(() => {
    console.log(socket)
    if (socket) {
      socket.onmessage = function(e){
        console.log('message', e)
        const data = JSON.parse(e.data)
        syncOrder({ data })
      }
      socket.onopen = function(e){
        console.log('open', e)
      }
      socket.onerror = function(e){
        console.log('error', e)
      }
      socket.onclose = function(e){
        console.log('close', e)
      }
    }
  }, [socket]);

所以在本地,我只能在MemoryChannelLayer中使用我的频道。也可能是因为有了windows操作系统。但是我试过安装这个,redis服务器可以运行,但是我认为它有一些兼容性问题。那是昨天,现在服务器将不会运行,错误为1069:登录失败。
在制作过程中,我仍然无法让它工作。我有一个基于ubuntu的服务器,我遵循的教程让redis在macos上工作,我认为它是基于linux的(语法相同)。我跟踪了channels和channels redis包的安装,并进行了上述配置,但仍然无法工作。我得到这个错误:

WebSocket handshake: Unexpected response code: 200

在教程中提到运行协议服务器时输入:

daphne -p 8001 myproject.asgi:application

但我有个错误:

django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

现在我只能在ubuntu或本地windows操作系统上使用redis。找不到在线有效的解决方案,已在此处发布。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题