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,)
        }
    },
}
Back to Top