Django channels+Celery实战踩坑实录

最近在做一款测试平台,需要用到实时日志系统,所以就采用了Django+channels+celery+redis架构。

以下为windows平台!

过程并不顺利,原因有:

1.对websocket不太熟

2.第一次接触channels、celery

3.第一次搞实时日志系统,没有经验

虽然这些技术以前略看过,但用起来是另一回事,特此记录踩坑记录,相关教程可以参考:

https://mp.weixin.qq.com/s/hqaPrPS7w3D-9SeegQAB2Q

https://mp.weixin.qq.com/s/r5SpyTjRl0jJeAuYE4Q_-Q

该教程使用Linux,而本人脑残使用了windows,所以除了很多问题,也刚好学习了很多,所幸最后都搞定了。

问题1:部署了channels收不到消息?

答案:多半是redis没有配置好

问题2:部署了celery,但是报错Celery ValueError: not enough values to unpack (expected 3, got 0)?

答案:celery版本太高,你一定是安装了celery4.x。建议退回到celery3.1.25

问题3:celery版本是3,但是报错:redis celery AttributeError: 'str' object has no attribute 'items'

答案:降级了celery,也要降级redis,降redis降级到2.10.6

问题4:日志系统终于好了,但是前端关闭socket后再打开就收不到信息了?

答案:其实看celery日志就明白,channles_name没变,还是上一次的记录。是因为你使用了--pool=solo参数启动selery导致的,去掉该参数,使用  celery -A webset  worker -l info启动,此时如果报错,大概率是因为上述问题2、3

问题5:celery启动了,redis也启动了,但是calery收不到消息?

答案:多半是你redis配置没弄好,查看webset/celery.py文件,查看redis配置,此时需注意celery3.x和celery4.x的配置有点区别

celery4.x:

app.autodiscover_tasks()
app.config_from_object('django.conf:settings',namespace='CELERY')

celery3.x:

app.config_from_object('django.conf:settings')

app.autodiscover_tasks(lambda :settings.INSTALLED_APPS)

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值