Django и WebSocket в производстве
Я впервые работаю с обновлениями в реальном времени в моем проекте Django, и это хорошо работает локально, но в производстве (Microsoft Azure) у меня возникает ошибка.
Примечание: Я читал пару статей об использовании Redis вместо InMemoryChannelLayer.
Ошибка
WebSocket connection to 'wss://mydomain.com/ws/orders/' failed:
(anonymous) @ orders/:288
Код
index.html
<script type="text/javascript">
const orderId = '{{ order.id }}';
let url = `wss://${window.location.host}/ws/orders/`;
const orderSocket = new WebSocket(url)
orderSocket.onmessage = function(e){
let data = JSON.parse(e.data);
document.querySelector('.backdrop').classList.remove('d-none');
setTimeout(() => {
location.reload();
}, 3000);
}
</script>
settings.py
ALLOWED_HOSTS = ['mydomain.com', '127.0.0.1', 'localhost'] # my domain refers to my website domain
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels.layers.InMemoryChannelLayer",
},
}
ASGI_APPLICATION = 'core.asgi.application'
INSTALLED_APPS = [
'channels',
# other apps...
]
routing.py
from django.urls import path
from . import consumers
websocket_urlpatterns = [
path('ws/orders/', consumers.OrdersCustomers.as_asgi()),
]
То, что я пробовал:
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels_redis.core.RedisChannelLayer",
"CONFIG": {
"host": "redis://localhost:6379",
},
},
}
Но не знал, как настроить host.