解决nginx+phpfpm常出502bad gateway的方案之一

网站常出现502 bad gateway,程序没有问题。

根据nginx日志:
connect() to unix:/var/run/php-fpm.sock failed (11: Resource temporarily unavailable)
发现phpfpm的listen是unix sock方式运行的,问题可能出在php fpm上。php fpm配置文件里有backlog,backlog是linux服务器在socket处理连接数的定义,phpfpm默认为-1,将-1改为4096,重启php fpm问题解决。

我估计将phpfpm的listen改为某个端口,然后nginx 再fastcgi_pass这个端口,应该也可以解决这种问题。

如何写好需求分析

一、需求书的种类

需求实际上有两种,一种叫用户需求,一种叫开发需求,也叫需求规格说明书。用户需求一般是由用户提出,立足于用户的角度来思考需求,观众群体主要是用户群;而开发需求也就是我们普通意义上说的需求分析,一般是由项目经理或产品经理整理,面向开发人员的一种分析文件。

二、需求分析要解决以下几方面的问题

(1)我们的规划是什么,分阶段版本实现吗,每个版本要达到什么样的要求

(2)系统做出来的会是什么样的

(3)系统对软件、硬件、人文管理等有什么要求

(4)有哪些人员会使用这个系统,他们之间有什么区别

(5)需求如何与下一步的开发、测试衔接——可以通过对需求进行编号

(6)需求内容有没有分优先级,有没分版本,即哪些功能需要在哪个版本中实现,哪些功能是最优先开发

三、编写注意

(1)没有一次性写完就定论的需求分析

需求写出来后,需要进行讨论与修改,讨论时需要开发人员参与,需要用户的参与,这样才可以保证需求是有效的、可以实现的需求。另外写需求的人本身思考问题的方式也会决定其写出的需求分析文件的局限性,因此更有必要进行讨论与修正;

(2)无歧义,精确

如果写出来的是模凌两可的东西,说明你的需求还没写好,开发人员按照这个需求就会无所适从,不知该如何下手

(3)需求实现业务,但不一定要照搬业务

要明白软件是自动化的业务流程,很多现实环境的业务流程可能要好几道环节,在软件上可能只有一道环节,因为业务流程被自动化了,有些环节被自动化处理简化掉了

(4)少写废话

判断你写的内容是不是废话就看去掉你写的那些内容后,你的描述是不是还能反映你的真实意图。废话写多了容易引起误解的

(5)多画图

很多语言难以解释的东西用图示却可以很清晰的表达,这方面的工具很多,PS,PPT,MindManager,Visio,Auxre RP等,如可以借用如Auxre RP来画原型界面,有了原型界面,大家对需求的认识会更好统一。可以借用Visio来画业务流程图。

(6)用户至上,不是技术至上

需求要能符合用户的需求是最为关键的要求,其次才是系统带给用户的体验。写需求时,不能从技术人员的角度考虑,我要如何去省事省力来实现系统,当然省事省力可以降低开发成本是好事,但它不是我们的目的

四、编写内容结构示范

一、需求概述

整体描述需求内容

二、用户群体说明

说明系统用户有哪些类型,这些类型用户之间的权限区别、业务区别等

三、业务流程分析

有些系统涉及的业务流程较复杂,有必要单独说明一下

四、功能结构图

说明一下系统的整体功能有哪些

五、版本规划

六、功能需求分析

将各功能进行详细说明,可按以下部分进行:

(1)功能描述
(2)优先级与版本—优先级可分1,2,3,1级最优先,版本指的是这功能需要在哪个版本中实现是1.0版,还是2.0版
(2)业务规则说明
(3)数据要求说明—有些数据在存储上或表单输入上有要求与限制的要说明
(4)原型界面设计—原型界面
(5)前置条件–即使用本功能有没有特别要求

七、系统使用的软件与硬件环境说明

用户的投资、使用习惯等会影响系统要采用什么样的软件与硬件环境

五、编写需求分析的人员素质要求

写需求分析的人一般是项目经理或是产品经理,如果你有意向向这方面努力,那么要多学学如何写好需求分析。要写出一份好的需求分析并不容易,要求编写人员能站在用户的角度,去规划与分析好系统要实现的功能,如果有几年的开发经验对编写需求来说会更有帮助,因为有开发经验就能更好理解开发人员想要的是什么内容,关心的是什么内容。当然最重要的是用户的感觉,而不是开发人员的感觉

运行form的reset方法后select元素的值丢失问题要

在IE中,当运行form的reset方法后,如果你的select元素中的option元素没有指定selected属性,则在post表单时,该select元素不会被post,导致服务端程序无法取得该select元素的值,Firefox与chrome没这个问题,万恶的IE

1服从,2绝对服从

今天公司一个部门要求技术部取消某个订单中的某几件商品的生产,而这几件商品已领料出库,有的甚至已印制生产。因为前期系统规划问题,系统现有的功能无法满足,只能通过程序修改数据库实现,在我安排任务时,有个同事一直在说这是他们的问题,经常这样子,老是叫我们技术的改这个改那个,流程都定好了,每个流程都有审核,到最后还是要出现这种改单现象。。。

我了解这个同事的想法,但是有几个问题他忽略了:
1技术部也是一个服务部,使用技术部开发出来的系统的人都是我们的客户,客户的要求必须尽可能的满足
2出了问题首先必须寻找解决方案,而不是报怨,报怨解决不了事情

其实这只是个例子,我发现很多开发人员没有服务的意识,特别是那些只为自己公司使用的软件系统而作开发的开发人员,他们没有直接面对过外面的客户,不了解服务客户的重要性,在做客户项目时,客户叫你这样设计你就必须这样设计,否则就是拿不到钱,要不然你就滚蛋,客户直接换其他公司来做,很残酷很现实的。而这些做自己公司使用软件的人员,他们没这个机会去面对,都以为自己是老大,其他部门的需求爱理不理,这种态度带来的结果只能是内耗,降低公司整体的竞争力,最终也会影响公司的利益,个人的利益当然也会受牵连的。

突破管理

如果你的员工没有荣耀,没有成就感,没有较好的收入,甚至带回家的钱在老婆小孩面前都无法骄傲,那他怎么可能会为你骄傲

中层管理,先要当好被管理者,才能当好管理者,对上层的决策与指示,只有两条:1服从,2绝对服从

决策正确,做好考核的指标,明确考核结果的奖罚,就自然有所谓的执行力。

管理者要做管理的本职工作,而不是做某具体领域的专家,要做自己该做的事情,不做不该做的事,每天首要任务就是做最重要的事,即使你只做这一件,但却是最重要的。

什么是管理

读德鲁克的《管理的实践》笔记(1):
管理的首要功能就是为企业实现经济效益,管理层只能通过所创造的经济效益才能体现其存在的价值与权威。以前在软件公司上班,给客户做一个项目,客户给相应的费用,我能为公司创造多少效益一目了然。到了十方、东快网后,公司不为客户做项目,只做企业自己应用的项目或自己要运营的平台,可是这些项目与平台都没能给公司带来直接的经济效益,所以我一直也觉得压郁——我的价值没有直接体现,起码我是这样认为的,这也是我现在决定离开东快网的原因之一。

管理企业、管理管理者、管理员工和工作是管理的三个基本职能,企业的任何决策与行动都是同时在执行这三项基本职能,而不是单一某项职能。时间是管理必须要考虑的重要要素,因为现在的决策或行动不仅会影响企业现在的状况也会影响将来企业的发展。实际上这个很象佛家说的因果报应,如果管理者现在没有平衡好现在与未来,未来企业将会付出相应甚至更大的代价来偿还前面所作出的决策与行动。

nginx+php(fastcgi)+上传进度条的安装与配置

php-fpm详情见:http://syre.blogbus.com/logs/20092011.html
nginx+fastcgi见:http://www.kuqin.com/web/20080829/15611.html
php-fpm下载:http://php-fpm.anight.org/download.html
nginx介绍:http://www.ibm.com/developerworks/cn/web/wa-lo-nginx/

下载:http://sysoev.ru/nginx/nginx-0.7.30.tar.gz
下载:http://php-fpm.anight.org/downloads/head/php-5.2.8-fpm-0.5.10.diff.gz
下载:http://wiki.nginx.org/File:Nginx_uploadprogress_module-0.5.tar.gz
(1)装nginx
yum install pcre-devel
解压nginx-0.7.30.tar.gz与Nginx_uploadprogress_module-0.5.tar.gz(解压至/data/soft/nginx_uploadprogress_module)
./configure –prefix=/data/sys/nginx –user=nobody –group=nobody
–with-http_stub_status_module  –add-module=/data/soft/nginx_uploadprogress_module
make
make install
阅读更多

simplexml_load_file与json_encode的编码问题

1.json_encode目前只支持utf-8编码,因此如果json_encode的内容有双字节(如汉字)的字符必须先转为utf-8,否则json_encode出来的内容将为空,如:

$std = new stdclass();
$std->name=”中国”;
$std->eng = ‘china”;
$t = json_encode($std);
//在页面采用gbk情况下$t的值将是{“name”:””,eng:”china”},name属性值被清空,必须先对name进行转码,json_encode之前增加一步$std->name=iconv(‘gbk’,’utf-8′,$std->name);
//在页面采用utf-8情况下$t的值将是{“name”:”中国”,eng:”china”}

2simplexml_load_file的编码问题
在utf-8情况下是正常的,但在gbk环境下发现simplexml_load_file(“xml文件”)时,不管xml文件是gbk还是utf-8编码,simplexml_load_file出来的节点相关内容都是utf-8属性,所以如果页面采用非utf-8编码时必须进行iconv转码。

tinymce3.2.2.1跨域使用解决方案

TinyMCE是一个很优秀的可视化编辑器,在最近项目使用中,由于跨域使用产生了一些问题。
项目中,TinyMCE位于http://img.xxx.com/editor/tinymce中,而我的应用在http://life.xxx.com,life.xxx.com调用tinymce时用:
<script type=text/javascript src=http://img.xxx.com/editor/tinymce/tiny_mce.js></script>

这样当你点击tinymce的插入图片等有弹出窗口的功能按钮时,系统会报在tiny_mce_popup.js中产生“Permission Denied”的错误,根据官方文档的解析,在最新的3.2.2.1版中建议在tiny_mce_popup.js的最前面增加document.domain=”xxx.com”一句,由于tiny_mce_popup.js是由tinymce在运行中自行引入的,无法由我们的程序在运行中自动设定,因此如果在tiny_mce_popup.js中写上这句话会让系统变成硬编码,当我们每次域名变更时都要来更改这个文件。而我们想法是最好是这句话可以由系统自动产生,不需要人为加上这一句,为此必须在tiny_mce_popup.js加一几行hack代码:
阅读更多

activecollab2.3安装后显示空白的问题解决

activeCollab是一个优秀的项目管理工具,安装后页面显示空白,在windows机上一切正常,但在我的linux服务器有一台可以正常显示,一台显示安白,以排查,发现在activecollab/angie/classes/smarty/internals/cor.write_file.php文件中的方法smarty_core_write_file修改一下可正常:
@unlink($params[‘filename’]);
@rename($_tmp_file, $params[‘filename’]);
改为
@unlink($params[‘filename’]);
 file_put_contents($params[‘filename’], $params[‘contents’]);

原因是smarty无法将$_tmp_filere进行rename,具体原因还不清楚,通过将rename改为file_put_contents可以解决