档案日期2010的23

2010年6月7日 - 2010年6月13日

最后更新于 .

首先庆祝一下QQ餐厅正式不删档公测,本以为终于可以不用那么晚发版本了,结果昨晚入口CGI出现问题,折腾到凌成4点多,杯具……

先截个餐厅的图给大家看一下:

canting

先来介绍下背景,公司是使用自己写的webserver,然后用fastcgi的方式运行CGI,结果前端返回502错误。和运维的同学确认后,了解到当CGI在执行完却没有返回给webserver任何数据,就会报502错误。
检查了一下代码,任何出错都会有错误返回。
于是strace了一下进程,发现在出现一次如下的错误之后,以后的请求就全部都会出错。

修改

其实这个CGI和平常的CGI没有什么区别,只是由于用到了模板类,所以使用cout来进行输出而不是printf,结果问题就出在了cout上。

与printf不同,cout在出错之后,会保存出错的状态,而由于fastcgi是一直在内存里的,所以在cout第一次出错之后,后面的就全部都会出错。
解决的方法是:
在每次开始cout数据之前,调用一下cout.clear()

之后,问题得到解决,在出现上图中的错误之后,以后的数据也一样可以正常输出。

但是这样毕竟不是办法,因为当访问量非常高的时候,用户遇到错误的概率也是非常高的。

以为是cout的数据不全,于是尝试在CGI输出的最后,我加了一行:cout<<flush;,结果发现出错的概率反而变高了许多,于是就去掉了。

目前猜测的问题还是底层库可能有头文件和.a不一致的问题,之前碰到一个应为这个问题写越界的,还有一个也是这个原因结果编译成可执行时,cout会core,看来底层库的统一也是件大事啊

参考文章:
endl cout 缓冲区执行时立即刷新

最后更新于 .

最近在使用django开发的时候,遇到了很多问题,特此记录在此,希望对以后的同学有所帮助。 一.django的ManyToManyField,当关联自身时,实现单向关联。 比如代码如下:

class MManConfType(models.Model): 
    linkconftype = models.ManyToManyField(‘self’,null=True,blank=True)

在这种情况下,当类型1关联了类型2的时候,那么类型2也一定关联了类型1,所以linkconftype就会始终是大于两条记录 解决的方法就是,增加symmetrical=False的定义,即:

linkconftype = models.ManyToManyField(‘self’,symmetrical=False,null=True,blank=True)

官网上的解释如下:

ManyToManyField.symmetrical Only used in the definition of ManyToManyFields on self. Consider the following model ...

最后更新于 .

最近工作忙的要死,明明积压了一大堆博文要写,结果却始终没有时间,也沉静不下心情来写。不过知识这种东西,如果不及时沉淀下来,恐怕很容易就会忘记了,所以还是赶紧写一下。
前几天在开小组例会,同事提到了一种makefile的写法,编译过大型工程的朋友应该都知道,当多个模块要协作编译的时候,通常要进入一个个目录去编译,所以,makefile可能如下所示:

all:
    cd dir1;make all;
    cd dir3;make all;
    cd dir2;make all;
clean:
    cd dir1;make clean;
    cd dir3;make clean;
    cd dir2;make clean;

当然,我们也可以用makefile自身的特性,即 make all/clean -C dir1来进行编译,但是实际上两种写法都避免不了3个问题:
1.当新加入一个模块的时候,要写入两句代码,一句是all,一句是clean ...

每日归档

上周

2010年度第 22 周

下周

2010年度第 24 周

归档