aw上的django频道:daphne和工作人员正在运行但是websocket taret不健康

时间:2017-06-25 17:57:58

标签: python django amazon-web-services django-channels daphne

我一直关注这篇文章 - https://blog.mangoforbreakfast.com/2017/02/13/django-channels-on-aws-elastic-beanstalk-using-an-alb/

让我的django-channels应用程序在aws上工作..但只有非websockets请求被处理。

我的频道图层设置为:

   CHANNEL_LAYERS = {
"default": {
    "BACKEND": "asgi_redis.RedisChannelLayer",
    "CONFIG": {
        "hosts": [os.environ.get('REDIS_URL', 'redis://localhost:6379')],
    },
    "ROUTING": "malang.routing.channel_routing",
 },
}

我有两个目标群体,如文章中所述。一个转发路径/到端口80和/ ws / *到5000。

我的supervisord.conf是 -

[program:Daphne]
environment=PATH="/opt/python/run/venv/bin"
command=/opt/python/run/venv/bin/daphne -b 0.0.0.0 -p 5000 
malang.asgi:channel_layer
directory=/opt/python/current/app
autostart=true
autorestart=true
redirect_stderr=true
user=root
stdout_logfile=/tmp/daphne.out.log

[program:Worker]
environment=PATH="/opt/python/run/venv/bin"
command= /opt/python/run/venv/bin/python manage.py runworker
directory=/opt/python/current/app
process_name=%(program_name)s_%(process_num)02d
numprocs=4
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/tmp/workers.out.log

当我在aws日志上检查supervisorctl状态的结果时,它显示它们正常运行。但我仍然得到了对ws的404响应。

请提供帮助,如果您想了解更多信息,请告知我们。

2 个答案:

答案 0 :(得分:0)

项目是否在本地运行?如果没有,问题出在软件上。如果是这样,问题在于您的部署。我会检查安全组/防火墙/ ELB配置,以确保可以访问正确的端口。

答案 1 :(得分:0)

在每个实例上本地运行Redis后端是没有意义的,前提是您实际上已部署了Redis后端,但没有提供信息。 Redis是一个缓存系统,允许通过不同实例共享数据。从体系结构的角度来看,更接近于DB的是一个简单的守护进程线程。 您应该改用外部Redis缓存,并在Django conf上引用它。

CHANNEL_LAYERS = {
"default": {
    "BACKEND": "asgi_redis.RedisChannelLayer",
    "ROUTING": "<YOUR_APP>.routing.application",
    "CONFIG": {
        "hosts": ["redis://"+REDIS_URL+":6379"],
    },
},

}

请参阅AWS ElasticCache服务。