Приложение для чата в реальном времени на django работает с каналами, но не работает после использования redis и развертывания на heroku

hello Я работаю над приложением для чата с каналами django, оно отлично работает на localhost, но как только я использовал redis и развернул на heroku, я не могу отправить сообщение, вебсокет всегда закрыт, my settings.py

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

Я использую redis и postgresql addons, и мой Procfile выглядит так

web: daphne myproject.asgi:application --port $PORT --bind 0.0.0.0 -v2
worker: python manage.py runworker --settings=myproject.settings -v2

почему он отлично работает на моем localhost, потому что я использую только это

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": 'channels.layers.InMemoryChannelLayer'
    }
}

На Heroku это отключено.

Поскольку это упоминается в документации, вы не должны использовать это в продакшене:

Канальные слои в памяти работают с каждым процессом как с отдельным слоем. Это означает, что межпроцессный обмен сообщениями невозможен. Поскольку основная ценность канальных слоев заключается в обеспечении распределенного обмена сообщениями, использование in-memory приведет к неоптимальной производительности и, в конечном счете, к потере данных в среде с несколькими экземплярами.

Значит, нужно придумать решение для Redis.

Вернуться на верх