近期遇到几个坑爹郁闷的BUG与问题

Other 2014-11-30 bug,supervisor,tornado

从八月后,我的站点评论功能失效了,也一直忙都没怎么关注,最近仔细看了一下这个问题,居然查出几个问题。

tornado4不decodeurl xsrftoken

tornado一推出4版本我就立即升级了,因为pip做的就像npm一样太容易了,一条命令就搞定,你不需要download然后tar解压在python setup.py安装。于是貌似在升级tornado后感觉评论就没了,因为一连几个月都没有收到评论邮件。于是最近才抽空测试了一下,终于发现问题了,因为我的站点开启xsrftoken,而提交的时候居然提示我xsrftoken不匹配。然而其它API是正常的,仔细看了一下,留言页面生成的xsrftoken也是每次刷新页面都随机生成的,这就奇怪了。

官网也没有看出什么信息,网上也没搜索出答案,然而我一直认为可能是tornado的问题,因为没升级之前是好的,升级之后就不能用了。但既然提示我xsrftoken不匹配那也应该是所有API啊,为什么是就偏偏就留言提交的API有问题呢?于是在仔细对比后,终于发现了问题,我在留言提交的时候把xsrftoken encodeURIComponent 了一下,其它接口没有encodeURIComponent。顺着这条线索追到服务器,发现服务器再做token比对的时候,居然发现新版本的tornado没有像老版本一样先decode再比对,而是直接就验证了,因为它生成的xsrftoken有“|”符号,于是原版token可能是这样:

"2|f06e9679|f6f6bc1653f71dbbe5d9251cd81be2f1|1417315300"

encodeURIComponent后

"2%7Cf06e9679%7Cf6f6bc1653f71dbbe5d9251cd81be2f1%7C1417315300"

两个当做字符串对比自然等于false,于是就服务器就会响应403,然后控制台告诉你不匹配。后来一想,其实我要是去看log可能就很快定位问题了,可惜当然为了省事只在nginx打印log,没有在supervisor打印log。

gravatar头像不能获取

博客的头像来自gravatar全球头像地址,然而有好长一段时间发现基本不能访问了,于是网上看了一下有此通病的站长都传言gravatar被墙了。。。不明白为何被墙,但问题来了总得解决,于是发现gravatar还有另外一条通道可以用,也就我的小站目前用的链接地址,格式如:

https://secure.gravatar.com/avatar/youremail

如果有遇到这个问题的童鞋可以试一试改成这个url,当然,如果哪天这个url也被墙了,那就得另谋出路了。

supervisord不能kil

解决问题后更新到服务器,因为我的python进程是用supervisord守护,所以得重启supervisord才能生效。像往常一样重启supervisord,然后执行了kill命令在执行supervisord启动命令后发现程序没有更新,问题依旧,检查了程序后确认程序已经是最新上传的。那么问题就是supervisord没有重启成功?于是我再把supervisord进程杀死后,这次我先不着急启动,ps -aux里已经没有supervisord进程了,然而更神奇的事情发生了,我的小站居然还能正常访问。。。。

这尼玛太考验人的智商了,我以为我眼花了,确认supervisord没有进程后,我的小站却一直还能访问。supervisorctl reload | stop | start 均提示

unlink: cannot unlink '/tmp/supervisor.sock': No such file or directory

这下,彻底无招了,于是到网上搜索答案,发现这居然是supervisord 3.0rc的一个bug,而我恰恰就是这个版本的。。。。试了一通都没有成功把supervisord升级到目前3.13还是不行。于是只好来个最绝的:reboot

rc版本可不能随便用在生产环境啊~~~~~

文字链接:《近期遇到几个坑爹郁闷的BUG与问题

文章地址:http://www.qttc.me/201411454.html

除非标注,琼台博客所有博文均为原创,转载请加文字链接注明来源

乳名?小名?昵称?网名?均可

email,放心,我不会给你乱投广告的

想获得回访就把你的站点URL写上(没有留空)

[NOTICE]木要投放广告
[NOTICE]木要骂人,说不该说的话
[NOTICE]自由言论,但要遵纪守法

Comments 1

  • 刚在别的地方看到的,你的supervisor是不是做成服务了,如果那样的话,杀死supervisord也不行。
    2015-08-20 13:33:40 [ 跟帖 ]
    1 #