Ssl.SSLCertVerificationError При подключении к heroku redis с помощью django-channels
Я создаю чат. У меня есть необходимость использовать WebSocket и развернуть мое приложение на Heroku. Я использую бесплатные heroku-redis и django-channels. В моих настройках py:
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
"hosts": [os.environ.get('REDIS_TLS_URL')],
},
},
}
Я пытался использовать REDIS_URL, но получал ту же ошибку
Затем я переключился на REDIS_TLS_URL. Обе ошибки были вызваны из consumers.py в "await self.channel_layer.group_add()"
class ChatConsumer(AsyncWebsocketConsumer):
async def connect(self):
self.room_name = self.scope['url_route']['kwargs']['room_name']
self.room_group_name = 'chat_%s' % self.room_name
print('==================================')
print('==================================')
print(self.room_name)
print(self.room_group_name)
print('==================================')
print('==================================')
await self.channel_layer.group_add(
self.room_group_name,
self.channel_name
)
await self.accept()
.........
Вот журналы
Я нашел этот открытый вопрос на channels_redis, который решает эту проблему: https://github.com/django/channels_redis/issues/235
Это временное решение, пока channels_redis не будет обновлен для правильной установки SSL контекста
ssl_context = ssl.SSLContext()
ssl_context.check_hostname = False
heroku_redis_ssl_host = {
'address': 'rediss://:password@127.0.0.1:6379/0' # The 'rediss' schema denotes a SSL connection.
'ssl': ssl_context
}
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
'hosts': (heroku_redis_ssl_host,)
}
},
}