【问题标题】:Redis backend in online using django使用 django 在线 Redis 后端
【发布时间】:2020-06-04 06:22:22
【问题描述】:

我已经创建了聊天应用程序,在离线时它工作正常,但是当我在线部署它时,我收到了这个错误

注意: 我已经安装了 redis 没有问题,这是我的 settings.py 这是production.py,这是我的另一个settings.py

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

这是我的 settings.py

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [("127.0.0.1", 6379)],
        },
    },
}

注意我的网站已上线

这是我的参考https://github.com/codingforentrepreneurs/ChatXChannels

更新

当我跑到 ubuntu 时

$ redis 服务器

$ ps 辅助 | grep redis 服务器

我仍然得到这个错误

【问题讨论】:

  • 您的服务器运行状况如何?在生产中运行时,您应该使用 Daphne
  • 我使用redis运行服务器
  • 你的启动命令是什么? python manage.py daphne myserver.asgi:application gunicorn myserver.wsgi:application ?或者你在使用 uwsgi 吗?
  • python manage.py

标签: django postgresql redis ubuntu-18.04 django-channels


【解决方案1】:

听起来您预先存在的 Django 服务器正在处理您的请求,而不是接受请求的通道。

我认为您的问题在于您如何在生产中运行服务器。

在生产中运行频道时,您有 2 个选择。

1) 通过 Channels 运行所有请求(即使是那些由您的普通 Django 视图处理的请求)

2) 运行您的普通服务器实例和您的频道服务器实例(在不同的本地端口上),其中一些 path based reverse proxy 在它们前面(例如 Nginx)将请求路由到相应的本地端口。

无论您选择何种选项,您都应该使用本指南 https://channels.readthedocs.io/en/latest/deploying.html#run-protocol-servers(不是 python manager.py)在生产中运行频道。

如果您选择选项 1),请记住,当您运行它时,您需要它在与旧 Django 服务器运行时相同的端口配置上运行。

如果您选择选项 2),您应该确保所有流量首先到达您的反向代理 (Nginx) 服务器。然后,您可以在不同的端口上运行Daphne,并在 Nginx 中设置路由以根据路径代理传递到相应的服务器实例。

【讨论】:

  • 使用 django 频道时,redis 不负责处理您的 websocket 连接。 daphne 服务器会处理这个问题。您在尝试创建 WS 连接时收到 200 的事实表明您的请求没有被路由到通道服务器中的 websocket 使用者。它使用redis在打开的连接之间进行通信。 ----------- 您能否更新您的问题以包括您如何启动 django/django-channels 服务器。
  • 谢谢先生,我会试试达芙妮,希望一切顺利
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 2015-02-06
相关资源
最近更新 更多