Приложение для чата в реальном времени на 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.