Каналы Django 2 и EC2 / Elasticbeanstalk

Мой короткий вопрос, как настроить Django-channels v2 на AWS Elasticbeanstalk? Ниже приведены длинные и менее привлекательные вопросы. Заранее спасибо!


Я пытаюсь настроить экземпляр elasticbeanstalk с помощью Django Channels 2.02. Я следил за этим https://hackernoon.com/setting-up-django-channels-on-aws-elastic-beanstalk-716fd5a49c4a учебное пособие. Учебное пособие для каналов 1.

Экземпляр Elasticbeanstalk был создан с помощью балансировщика нагрузки приложения. Экземпляр Redis 4.0 работает под управлением 0.0.0.0:6379, что подтверждается netstat. Пользовательский TCP, диапазон портов: 6379, источник: 0.0.0.0/0 в экземпляре redis.

alb_listener.config в .ebekstension:

option_settings:   aws:elbv2:listener:80:
    DefaultProcess: http
    ListenerEnabled: 'true'
    Protocol: HTTP   aws:elasticbeanstalk:environment:process:http:
    Port: '8000'
    Protocol: HTTP

Сервер Daphne запускается командой "Daphne .asgi: application". Прослушивание TCP-адреса 0.0.0.0:8000. Он возвращает:

2018-03-12 08:59:30,778 ERROR    Exception inside application: [Errno -2] Name or service not known
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/channels/consumer.py", line 54, in __call__
    await await_many_dispatch([receive, self.channel_receive], self.dispatch)
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/channels/utils.py", line 47, in await_many_dispatch
    result = task.result()
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/channels_redis/core.py", line 167, in receive
    task.result()
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/channels_redis/core.py", line 187, in receive_loop
    real_channel, message = await self.receive_single(general_channel)
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/channels_redis/core.py", line 224, in receive_single
    async with self.connection(index) as connection:
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/channels_redis/core.py", line 403, in __aenter__
    self.conn = await aioredis.create_redis(**self.kwargs)
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/aioredis/commands/__init__.py", line 174, in create_redis
    loop=loop)
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/aioredis/connection.py", line 107, in create_connection
    timeout, loop=loop)
  File "/usr/lib64/python3.6/asyncio/tasks.py", line 339, in wait_for
    return (yield from fut)
  File "/opt/python/run/venv/local/lib/python3.6/site-packages/aioredis/stream.py", line 19, in open_connection
    lambda: protocol, host, port, **kwds)
  File "/usr/lib64/python3.6/asyncio/base_events.py", line 733, in create_connection
    infos = f1.result()
  File "/usr/lib64/python3.6/concurrent/futures/thread.py", line 55, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/lib64/python3.6/socket.py", line 743, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
  [Errno -2] Name or service not known

Websocket не возвращает ошибку в консоли браузера.

Он работает на моем локальном сервере запуска. В чем проблема? Не могли бы вы помочь мне написать сценарий конфигурации, чтобы мне не нужно было запускать Дафну вручную?


person Espen Finnesand    schedule 12.03.2018    source источник
comment
Эй, ты нашел решение для этого? Я часто получаю эту проблему на EC2. Спасибо   -  person BoCode    schedule 13.06.2018
comment
Привет @BoCode, извини, но я не нашел ответа.   -  person Espen Finnesand    schedule 13.06.2018
comment
Я пробую то же самое! Если у вас получится, скажите мне, пожалуйста   -  person Karl Zillner    schedule 15.06.2018
comment
Для меня это пока загадка. Сообщу вам, как только найду решение.   -  person BoCode    schedule 17.06.2018
comment
Каналы 2 не используют дафну ... Я пытаюсь заставить каналы 2 работать и с эластичным бобовым стеблем ... но моя ошибка другая.   -  person Karl Zillner    schedule 04.09.2018


Ответы (1)


Очень поздно ответить здесь.

Проблема связана с config:hosts URL-адресом в руководстве. Удалите из URL-адреса часть redis: //.

Например,

REDIS_PUBLIC_DNS = "YOUR-REDIS-DNS.amazonaws.com"

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [(REDIS_PUBLIC_DNS, 6379)],
        }
    }
}

Проверить соединение можно с помощью redis-cli,

redis-cli -h REDIS-PUBLIC-DNS-url ping ;you should expect PONG in response.
person AnnShress    schedule 12.07.2019