-
5分钟就可以搞定的bug
2017-02-03 15:56:12
有人提交了一个 bug 给我:“26 层会议室的灯是开着的,需要把它关上。”
这个 bug 上还有个备注:“这大概会花你 5 分钟左右,就换一下开关而已。”
我来到 26 层的会议室。灯是开着的,不过房间里没有灯的开关。
于是我打算装个开关。不过设计师说这会破坏房间的美感。另外,墙是混凝土的。如果有合适的工具,我倒是现在就可以安装。不过没人会批准购买这些工具。没有合适工具的话就得花上两天的时间。但他们想要马上就解决问题,因为担心 CEO 随时都可能决定来到 26 层,没准一高兴就会走进会议室然后发问:特么的为毛这个灯是开着的。
现在我开始收到邮件,询问为什么灯还没关上。
于是我不得不停下来,群发了一封邮件解释一下情况,然后有些人在这个邮件链中展开了令人惶恐的讨论。
我知道不可能指望着在邮件中讨论的这些人解决问题。这个 bug 上标了我的名字,今天就得解决,如果没能处理掉的话有麻烦的人是我。于是我爬到了 26 层通道的天花板里,找到连着那个灯的电线,剪断,封口,搞定,问题解决了。
为了平息邮件讨论中的恐慌,我汇报了我是如何解决这个问题的。
一开始并没什么反应,不过之后每个人都开始担心这灯再也没法打开或者关上了。要是 CEO 想在那儿开会怎么办?于是他们要求我这么干:把连着灯的电线一直拉到地下室,当有人需要开灯关灯的时候,他们会联系我,然后我就跑到地下室去接通或者断开电线。
我抗议这个荒唐的方法。不过我的老板说:“没错,我知道这并不完美。不过目前我们只有这个办法了。”
这个时候我意识到自己得做出一个选择了:我可以就这么干,或者抗议、辞职、再找份别的工作。不过我又意识到当我开始新工作的时候,他们可能还会要我干出这种白痴的事情,甚至更严重。
于是我只好去把 26 层的电线一直拉到了地下室。当我来到地下室的时候,我看到墙上挂着好几十根电线,都是之前碰到同样问题时的那些人干的。(于是我知道了这个点子是从哪儿来的。)我尽我所能架好了电线,然后贴了标签,在标签上简短地向下一个干这事儿的人表示了歉意。
当我回到办公桌之后,我收到了一条消息。QA 重新打开了这个 bug。他说:“我看到光了。”
我重新跑回了 26 层的会议室。灯是关着的。我又回到我的办公桌,关闭了 bug,告诉他我亲自检查过了。
QA 又一次打开了这个 bug,上面写着:“房间还是很亮”。我又去检查了一遍灯泡确实是关着的,然后我向老板报告了这件事,老板建议我回到地下室检查一下电线。我抗议说我刚刚才看到灯确实是关着的啊。“我知道,不过这样我就可以告诉 QA 说我绝对把所有地方都检查过了。”
于是我叹了口气来到了地下室。毫无疑问,电线并没有接上。电线的接头也是封着的。绝对没有任何东西能产生出电力来。
我向 QA 汇报说我检查过电线了,是断开的,而且我也看过灯泡,确实是关着的。
“我说的不是灯泡,” QA 说道,“问题是房间里的光线。那儿太亮了。你就不能把百叶窗关上么?”
我回复说“百叶窗不是我的责任,bug 只是说应该把灯关上。”
QA 不相信我,于是群发了一封邮件询问百叶窗跟这个 bug 到底有没有关系。
很长一段时间都没人说话。最后终于有人在这个邮件链里面招呼我了。
“理论上来说,” 他们问道,“在 26 层参加会议的人如果觉得太亮或者太暗的话,有可能自己打开或者关上百叶窗么?”
“是的,他们可以”,我回复道。
“我是说,即使普通人也可以?他们不需要我来干这个?”
是的,普通人也可以。不,他们不需要我。任何人都能干这个。
“很好。太棒了。那么我们可以先不管这个了。我会组织一个站会来讨论一下百叶窗的问题。”
于是 bug 被关闭了。现在,CEO 可能已经听说了一些风言风语,关于 26 层会议室有一些偷偷摸摸的情况,然后决定要在那儿开个会。于是我收到了好多惊慌失措的邮件,说他们需要把灯打开。
我来到地下室,接上电线,然后回到办公桌前,在我的收件箱里发现 32 条新消息:“出问题了!灯没打开!” “有个问题!没有灯!” “我收到这些邮件了吗?” 等等。
第 32 封邮件写道:“算了,灯亮了。”
在需要关灯的时候,这个过程差不多一模一样地又来了一遍。
不过也不是什么好消息都没有,是这样的:在这次会议结束后,所有人甚至都忘了在 26 层还有间会议室,于是我再也不用为这个干什么了。
-
创建同结构SQL语句
2014-12-16 16:35:44
select * into [新表名] from [旧表名] where 1=2; ---- 只复制表结构,不复制表内容
select * into [新表名] from [旧表名]; ---- 既复制表结构,也复制表内容
insert into [已创建好结构相似的新表名] select * from [旧表名]; 或者 select value1,value2…… into table2 from table1; -
apache搭建https服务器
2014-11-11 14:50:04
1.首先下载apache带有ssl的,下载名为:httpd-2.2.21-win32-x86-openssl-0.9.8r.msi
2.配置之前做如下操作:
请确认Apache已经安装并可以正常工作. 并且ssl需要的文件在如下的位置:
[Apache安装目录]/modules/ mod_ssl.so
[Apache安装目录]/bin/ openssl.exe, libeay32.dll, ssleay32.dll
[Apache安装目录]/conf/ openssl.cnf
3.做如下配置:
在Apache的conf目录中用文本编辑器打开httpd.conf
3.1. 去掉下面设置行前面的#
LoadModule ssl_module modules/mod_ssl.so3.2. 去掉下面设置行前面的# (在2.0.x版本中没有这一项)
Include conf/extra/httpd-ssl.conf
3.3. 在Apache的conf/extra目录中打开httpd-ssl.conf, 更改如下设置. [apache安装目录]是指Apache的安装目录, 比如c:/Apache; my-server的两个文件就是前一个步骤制作的文件, 文件的位置就是这些文件在磁盘中的位置 (在2.0.x版本中这些设置仍然在 httpd.conf文件中进行)
SSLMutex default
SSLCertificateFile "[Apache安装目录]/conf/ssl/my-server.der.crt"
SSLCertificateKeyFile "[Apache安装目录]/conf/ssl/my-server.key"
4.tomcat域名跳转配置的话,需要如下配置:
httpd-ssl.conf最后增加如下配置:
1.Listen 443后面增加
NameVirtualHost *:443 //备注不加的话,多域名会有问题
2.最后面增加如下配置
<VirtualHost www.163.com:443>
ServerName www.163.com
SSLEngine on
#SSLProtocol all -SSLv2
#SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLCertificateFile "D:/sw/app/Apache/conf/server.crt" //从第三方申请来的证书存放目录
SSLCertificateKeyFile "D:/sw/app/Apache/conf/server.key" //从第三方申请来的证书存放目录
JkMount /new* tomcat-new
</VirtualHost>
此处配置与httpd-vhosts.conf的配置类似,如果两个文件都配置的话,http与https都可以访问。
重启apache,使用https://www.163.com/new/看是否能正常访问
-
nginx搭建https服务器
2014-11-10 16:17:09
首先确保机器上安装了openssl和openssl-devel
#yum install openssl
#yum install openssl-devel
使用现成的证书。
至此证书已经生成完毕,下面就是配置nginx
然后重启nginx即可。
ps: 如果出现“[emerg] 10464#0: unknown directive "ssl" in /usr/local/nginx-0.6.32/conf/nginx.conf:74”则说明没有将ssl模块编译进nginx,在 configure的时候加上“--with-http_ssl_module”即可
如下操作:
http://nginx.org
tar xvzf nginx-1.3.2.tar.gz
查看ngixn版本极其编译参数
/usr/local/nginx/sbin/nginx -V
进入nginx源码目录
cd nginx-1.3.2
以下是重新编译的代码和模块
./configure --prefix=/usr/local/nginx--with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
make 千万别make install,否则就覆盖安装了
make完之后在objs目录下就多了个nginx,这个就是新版本的程序了
备份旧的nginx程序
cp /usr/local/nginx/sbin/nginx/usr/local/nginx/sbin/nginx.bak
把新的nginx程序覆盖旧的
cp objs/nginx /usr/local/nginx/sbin/nginx
测试新的nginx程序是否正确
/usr/local/nginx/sbin/nginx -t
nginx: theconfiguration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx:configuration file /usr/local/nginx/conf/nginx.conf test issuccessful
平滑重启nginx
/usr/local/nginx/sbin/nginx -s reload
查看ngixn版本极其编译参数
/usr/local/nginx/sbin/nginx -V
这是我重新编译的代码:
./configure --prefix=/usr/local/nginx --with-google_perftools_module --user=www --group=www --with-http_stub_status_module --with-http_gzip_static_module --with-openssl=/usr/ --with-pcre=/mydata/soft/pcre-8.31
nginx重启:
/usr/nginx/sbin/nginx -s reload
如碰到如下问题:
nginx: [emerg] getpwnam(“www”) failed 错误处理方法
如下解决办法:
解决方案一
在nginx.conf中 把user nobody的注释去掉既可
解决方案二
错误的原因是没有创建www这个用户,应该在服务器系统中添加www用户组和用户www,如下命令:
1
2
/usr/sbin/groupadd -f www
/usr/sbin/useradd -g www www
以上方法测试通过,启动后,在浏览器里输入IP
-
CentOS安装zip及用法
2014-10-13 10:52:48
CentOS安装zip及用法在CentOS中安装完rar命令,会自动安装zip命令。以下命令均在/home目录下操作cd /home #进入/home目录1、把/home目录下面的mydata目录压缩为mydata.zipzip -r mydata.zip mydata #压缩mydata目录2、把/home目录下面的mydata.zip解压到mydatabak目录里面unzip mydata.zip -d mydatabak3、把/home目录下面的abc文件夹和123.txt压缩成为abc123.zipzip -r abc123.zip abc 123.txt4、把/home目录下面的wwwroot.zip直接解压到/home目录里面unzip wwwroot.zip5、把/home目录下面的abc12.zip、abc23.zip、abc34.zip同时解压到/home目录里面unzip abc\*.zip6、查看把/home目录下面的wwwroot.zip里面的内容unzip -v wwwroot.zip7、验证/home目录下面的wwwroot.zip是否完整unzip -t wwwroot.zip8、把/home目录下面wwwroot.zip里面的所有文件解压到第一级目录unzip -j wwwroot.zip=====================================================复制代码主要参数-c:将解压缩的结果-l:显示压缩文件内所包含的文件-p:与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换-t:检查压缩文件是否正确-u:与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其它文件解压缩到目录中-v:执行是时显示详细的信息-z:仅显示压缩文件的备注文字-a:对文本文件进行必要的字符转换-b:不要对文本文件进行字符转换-C:压缩文件中的文件名称区分大小写-j:不处理压缩文件中原有的目录路径-L:将压缩文件中的全部文件名改为小写-M:将输出结果送到more程序处理-n:解压缩时不要覆盖原有的文件-o:不必先询问用户,unzip执行后覆盖原有文件-P<密码>:使用zip的密码选项-q:执行时不显示任何信息-s:将文件名中的空白字符转换为底线字符-V:保留VMS的文件版本信息-X:解压缩时同时回存文件原来的UID/GID -
Robot Framework自动化测试--第一个脚本
2014-10-10 11:57:21
在你安装好 RF-ride 之后,桌面就会生成一个 RIDE 图标。双击启动,界面如下:
下面我们就一步一步的创建第一条用例,至于细节不多解释,只是对 RF 框架写用例有个感性的认识。
创建测试项目
选择菜单栏 file----->new Project
Name 输入项目名称。
Type 选择 Directory 。
创建测试套件
右键点击“ 测试项目 ”选择 new Suite 选项
Name 输入项目名称。
Type 选择 File 。
创建测试用例
右键点击“测试项目”选择 new Test Case
用例只需要输入用例 name ,点击 OK 即可。
导入selenium2library库
因为 RF 框架编写基于 web 的测试用例,所以,我们需要 selenium 的库支持。所以,我们在使用的过程中需要加载 selenium2library库。
在“测试套件”的Edit 标签页,点击“ Library ”按钮,弹出输入框, Name 输入: Selenium2Library , 点击OK 完。
如果导入的库显示为红色,表示导入的库不存在。如果是黑色则表示导入成功。
编写用例
下面就可以开始写我们的用例了,可是怎么写呢?我们可以通过按 F5 快捷键来查询脚本的关键字。如果你接触过 QTP 或 selenium IDE 等自动化工具的话,应该会有一些思路。
如上图,自动化脚本从打开浏览器开发,如上图,我想打开一个浏览器,想的是“open”为关键字进行搜索,结果找到了一个“Open Browser”的关键字,点击这个关键字,想显示它的用法和说明。
根据说明,我们来尝试创建这个打开浏览器的操作吧:
“Open Browser”变蓝了,说明它是一个合法的关键字,后面有一个方框是红色的,表示这个参数不能缺省的。通过说明信息中,我发现它需要一个url 地址是必填的,当然还需要指定 browser (默认不填为 friefox )
更多关键的使用,请参考相关 API 文档。这里不过多介绍。按照上面的方法。创建百度搜索用例如下:
运行测试用例
勾选当前需要运行的测试用例,点击工具栏运行按钮,如果只运行单个用例的话,也可以切换到用例的 Run 标签页,点击“ start ”按钮。
运行信息:
运行信息显示会生成三个文件:Output.xml 、 Log.html 、 Report.html
我们重点查看 Log.html 和 Report.html , Log.html 更关注脚本的执行过程的记录, Report.html 更关注脚本的执行结果的展示。
赶快打开你的测试报告看看效果吧!
备注:
解决碰到的问题:
1.
selenium.common.exceptions.WebDriverException: Message: "Can't load the profile.
记录一下,Selenium在最新版本中修好了这个问题。运行CMD,然后输入
pip install -U selenium
-
Robot Framework自动化测试--安装篇
2014-10-10 11:51:21
Robot Framework自动化测试:RF 框 Robot framework :https://pypi.python.org/pypi/robotframework/2.8.5GUI 库 wxPython : http://www.wxpython.org/download.php (Wxpython 是 python 非常有名的一个 GUI 库,因为 RIDE 是基于这个库开发的,所以这个必须安装)图形界面 Robot framework-ride : https://pypi.python.org/pypi/robotframework-ride (RIDE 就是一个图形界面的用于创建、组织、运行测试的软件)RF-seleniumlibrary Robot framework-selenium2library:https://pypi.python.org/pypi/robotframework-selenium2library/1.5.0(可以通过 python 的 pip 工具包进行安装:>pip install robotframework-selenium2library )(RF-seleniumlibrary 可以看做 RF 版的 selenium 库, selenium ( webdriver )可以认为是一套基于 web 的规范( API ),所以, RF 、 appium 等测试工具都可以基于这套 API 进行页面的定位与操作)python1、下载并安装setuptools的Windows版本【这个工具是python的基础包工具】2、下载并安装pip工具【这个工具是python的安装包管理工具,类似于Ubuntu的aptget工具】3、通过pip命令安装selenium工具4、测试demo脚本具体安装操作:1、去这个地址http://pypi.python.org/pypi/setuptools下载setuptools2、直接安装其Windows版本的安装包,但需要对应的python版本支持3、pip:地址http://pypi.python.org/pypi/pip4、r解压,进入其目录输入命令:python setup.py install5、使用pip安装selenium,命令为:pip install -U selenium6、在命令行调用测试脚本【python demo.py】robotframework相关安装包和测试库列表:1、python-2.7.5.msi(一切的基础,切记安装的路径不要有中文不要有空格,http://www.python.org/download/releases/2.7.5/)2、setuptools (https://pypi.python.org/pypi/setuptools/)3、pip-install (pip安装方式,https://github.com/pypa/pip/releases)4、 wxPython2.8-win32-unicode-2.8.12.1-py27.exe(wxPython,RIDE需要他的支 持,http://sourceforge.net/projects/wxpython/files/wxPython/2.8.12.1/ )5、robotframework-2.8.4(robotframework本身。http://code.google.com/p/robotframework/downloads/list)6、robotframework-ride-1.3.0.win32.exe(robotFramework的IDE,http://code.google.com/p/robotframework-ride/downloads/list)7、decorator-3.4.0(S2L库的依赖库。https://pypi.python.org/pypi/decorator/3.4.0)8、docutils-0.11(S2L库的依赖库。https://pypi.python.org/pypi/docutils/0.11)9、robotframework-selenium2library (selenium2测试库,基于webdriver驱动,https://github.com/rtomac/robotframework-selenium2library/releases)10、 selenium-2.35.0(是selenium的原生python库,https://pypi.python.org/pypi /selenium/2.35.0,而IEDriver.exe要到GOOGLE下载http://code.google.com/p /selenium/)11、pywin32-217.win32-py2.7.exe(请注意py版本http://sourceforge.net/projects/pywin32/files/pywin32/)12、AutoItLibrary-1.1(必须先安装上面的pywin32,下载路径:http://code.google.com/p/robotframework-autoitlibrary/)13、DatabaseLibrary(http://franz-see.github.io/Robotframework-Database-Library/)
备注:安装中碰到的问题
1.环境变量增加如下,D:\Python27;D:\Python27\Scripts;
2.在windows下安装第三包时,需要进入到安装包的目录下,用以下命令:python setup.py install -
[JAVA]定时任务之-Quartz使用篇
2014-06-10 15:09:03
分类: Java 2013-03-19 13:38 106人阅读 评论(0) 收藏 举报
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个, 甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。官方网站:http://www.opensymphony.com/quartz
相关Jar:
quartz-all-1.6.0.jar
jta.jar
commons-logging-1.1.jar
commons-collections3.2.jar经过封装的管理类:
- /**
- * 版权所有:华信软件
- * 项目名称:公用模块
- * 创建者: Wangdf
- * 创建日期: 2011-1-22
- * 文件说明: 定时任务管理类
- * 最近修改者:Wangdf
- * 最近修改日期:2011-1-22
- */
- package com.extjweb.quartz;
- import java.text.ParseException;
- import org.quartz.CronTrigger;
- import org.quartz.JobDetail;
- import org.quartz.Scheduler;
- import org.quartz.SchedulerException;
- import org.quartz.SchedulerFactory;
- import org.quartz.impl.StdSchedulerFactory;
- /**
- * 定时任务管理类
- *
- * @author 王德封
- */
- public class QuartzManager {
- private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
- private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";
- private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";
- /**
- * 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
- *
- * @param jobName
- * 任务名
- * @param jobClass
- * 任务
- * @param time
- * 时间设置,参考quartz说明文档
- * @throws SchedulerException
- * @throws ParseException
- */
- public static void addJob(String jobName, String jobClass, String time) {
- try {
- Scheduler sched = gSchedulerFactory.getScheduler();
- JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, Class.forName(jobClass));// 任务名,任务组,任务执行类
- // 触发器
- CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 触发器名,触发器组
- trigger.setCronExpression(time);// 触发器时间设定
- sched.scheduleJob(jobDetail, trigger);
- // 启动
- if (!sched.isShutdown()){
- sched.start();
- }
- } catch (Exception e) {
- e.printStackTrace();
- throw new RuntimeException(e);
- }
- }
- /**
- * 添加一个定时任务
- *
- * @param jobName
- * 任务名
- * @param jobGroupName
- * 任务组名
- * @param triggerName
- * 触发器名
- * @param triggerGroupName
- * 触发器组名
- * @param jobClass
- * 任务
- * @param time
- * 时间设置,参考quartz说明文档
- * @throws SchedulerException
- * @throws ParseException
- */
- public static void addJob(String jobName, String jobGroupName,
- String triggerName, String triggerGroupName, String jobClass, String time){
- try {
- Scheduler sched = gSchedulerFactory.getScheduler();
- JobDetail jobDetail = new JobDetail(jobName, jobGroupName, Class.forName(jobClass));// 任务名,任务组,任务执行类
- // 触发器
- CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// 触发器名,触发器组
- trigger.setCronExpression(time);// 触发器时间设定
- sched.scheduleJob(jobDetail, trigger);
- } catch (Exception e) {
- e.printStackTrace();
- throw new RuntimeException(e);
- }
- }
- /**
- * 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
- *
- * @param jobName
- * @param time
- */
- public static void modifyJobTime(String jobName, String time) {
- 查看(2737) 评论(0) 收藏 分享 管理
-
Linux RAR 安装和使用
2014-05-21 15:14:23
描述:Linux默认自带ZIP压缩,最大支持4GB压缩,RAR的压缩比大于4GB.
流程:下载 》安装 》 使用
-------------------------------------------------- 下载
# wget http://www.rarsoft.com/rar_CN/rarlinux-3.9.3.tar.gz
--16:01:50-- http://www.rarsoft.com/rar_CN/rarlinux-3.9.3.tar.gz
Resolving www.rarsoft.com... 217.70.129.242
Connecting to www.rarsoft.com|217.70.129.242|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 833828 (814K) [application/x-gzip]
Saving to: `rarlinux-3.9.3.tar.gz'
100%[=======================================>] 833,828 34.5K/s in 29s
16:02:22 (28.2 KB/s) - `rarlinux-3.9.3.tar.gz' saved [833828/833828]
-------------------------------------------------- 查看目录列表
# ls
rarlinux-3.9.3.tar.gz
-------------------------------------------------- 解压 tar.gz
# tar -xzvf rarlinux-3.9.3.tar.gz
rar/
rar/readme.txt
rar/default.sfx
rar/whatsnew.txt
rar/license.txt
rar/order.htm
rar/rar
rar/unrar
rar/rar_static
rar/technote.txt
rar/rarfiles.lst
rar/makefile
rar/rar.txt
-------------------------------------------------- 查看目录列表
# ls
rar
rarlinux-3.9.3.tar.gz
-------------------------------------------------- 切换目录
# cd rar
-------------------------------------------------- 编译文件
# make
mkdir -p /usr/local/bin
mkdir -p /usr/local/lib
cp rar unrar /usr/local/bin
cp rarfiles.lst /etc
cp default.sfx /usr/local/lib
-------------------------------------------------- 安装编译文件
# make install
mkdir -p /usr/local/bin
mkdir -p /usr/local/lib
cp rar unrar /usr/local/bin
cp rarfiles.lst /etc
cp default.sfx /usr/local/lib
-------------------------------------------------- 执行rar帮助命令
# rar --help
rar: /lib/libc.so.6: version `GLIBC_2.7' not found (required by rar)
-------------------------------------------------- 添加全局命令
# cp -f rar_static /usr/local/bin/rar
cp: overwrite `/usr/local/bin/rar'? y
-------------------------------------------------- 即可访问 rar 命令
# rar --help
RAR 3.93 Copyright (c) 1993-2010 Alexander Roshal 15 Mar 2010
Shareware version Type RAR -? for help
Usage: rar <command> -<switch 1> -<switch N> <archive> <files...>
<@listfiles...> <path_to_extract\>
<Commands>
x Extract files with full path
-------------------------------------------------- 解压所有文件包括路径
# rar x filename.rar -
nginx配置中域名与PHP共用
2013-11-28 13:43:12
nginx配置中域名与PHP共用,在nginx.conf如何设置:
server{
listen 80;
server_name 域名;
location /{
root /var/www/test/html1;
index index.html index.htm;
}
location ~ \.php$ {
root /var/www/test/html1;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
-
nginx php-fpm安装配置
2013-11-28 13:41:02
nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。
nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx
本文以php-fpm为例介绍如何使nginx支持PHP
一、编译安装php-fpm
什么是PHP-FPM
PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到.
PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
新版PHP已经集成php-fpm了,不再是第三方的包了,推荐使用。 PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官 方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM,其它参数都是配置php的,具体选项含义可以查看这里。
安装前准备
centos下执行yum -y
install
gcc automake autoconf libtool
make
yum -y
install
gcc gcc-c++ glibc
yum -y
install
libmcrypt-devel mhash-devel libxslt-devel \
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel \
zlib zlib-devel glibc glibc-devel glib2 glib2-devel
bzip2
bzip2
-devel \
ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel \
krb5 krb5-devel libidn libidn-devel openssl openssl-devel
新版php-fpm安装(推荐安装方式)
wget http:
//cn2
.php.net
/distributions/php-5
.4.7.
tar
.gz
tar
zvxf php-5.4.7.
tar
.gz
cd
php-5.4.7
.
/configure
--prefix=
/usr/local/php
--
enable
-fpm --with-mcrypt \
--
enable
-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath \
--
enable
-inline-optimization --with-bz2 --with-zlib --
enable
-sockets \
--
enable
-sysvsem --
enable
-sysvshm --
enable
-pcntl --
enable
-mbregex \
--with-mhash --
enable
-zip --with-pcre-regex --with-mysql --with-mysqli \
--with-gd --with-jpeg-
dir
make
all
install
旧版手动打补丁php-fpm安装(旧版程序已经没有了,大家新版的吧,这里做个展示)
wget http://cn2.php.net/get/php-5.2.17.tar.gz
wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
tar zvxf php-5.2.17.tar.gz
gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1
cd php-5.2.17
./configure --prefix=/usr/local/php -with-config-file-path=/usr/local/php/etc\
-with-mysql=/usr/local/mysql\
-with-mysqli=/usr/local/mysql/bin/mysql_config -with-openssl -enable-fpm -enable-mbstring\
-with-freetype-dir -with-jpeg-dir -with-png-dir -with-zlib-dir -with-libxml-dir=/usr -enable-xml\
-with-mhash -with-mcrypt -enable-pcntl -enable-sockets -with-bz2 -with-curl -with-curlwrappers\
-enable-mbregex -with-gd -enable-gd-native-ttf -enable-zip -enable-soap -with-iconv -enable-bcmath\
-enable-shmop -enable-sysvsem -enable-inline-optimization -with-ldap -with-ldap-sasl -enable-pdo\
-with-pdo-mysql
make all install以上两种方式都可以安装php-fpm,安装后内容放在/usr/local/php目录下
以上就完成了php-fpm的安装。
下面是对php-fpm运行用户进行设置
cd
/usr/local/php
cp
etc
/php-fpm
.conf.default etc
/php-fpm
.conf
vi
etc
/php-fpm
.conf
修改
user = www-data
group = www-data如果www-data用户不存在,那么先添加www-data用户
groupadd www-data
useradd -g www-data www-data二、编译安装nginx
然后按照http://www.nginx.cn/install 安装nginx
三、修改nginx配置文件以支持php-fpm
nginx安装完成后,修改nginx配置文件为,nginx.conf
其中server段增加如下配置,注意标红内容配置,否则会出现No input file specified.错误
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html; //静态页访问的路径
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}四、创建测试php文件
创建php文件
在/usr/local/nginx/html下创建index.php文件,输入如下内容
<?php echo phpinfo(); ?>
五、启动服务
启动php-fpm和nginx
/usr/local/php/sbin/php-fpm (手动打补丁的启动方式/usr/local/php/sbin/php-fpm start)
sudo /usr/local/nginx/nginx
php-fpm关闭重启见文章结尾
六、浏览器访问
访问http://你的服务器ip/index.php,皆可以见到php信息了。
安装php-fpm时可能遇到的错误:
1. php configure时出错
configure: error: XML configuration could not be found
apt-get install libxml2 libxml2-dev (ubuntu下)
yum -y install libxml2 libxml2-devel(centos下)2. Please reinstall the BZip2 distribution
wget http://www.bzip.org/1.0.5/bzip2-1.0.5.tar.gz
tar -zxvf bzip2-1.0.5.tar.gz
cd bzip2-1.0.5
make
make install
3. php的配置文件中有一行--with-mysql=/usr。安装的时候提示:
configure: error: Cannot find MySQL header files under yes.
Note that the MySQL client library is not bundled anymore.这是由于安装mysql时没有安装mysql头文件,或者是路径指定不正确,php找不到mysql的头文件引起的错误提示。
解决方法。
(1.) 查看你的系统有没有安装mysql header
find / -name mysql.h
如果有。请指定--with-mysql=/跟你的正常路径。
如果没有。请看下一步。
(2.)redhat安装
rpm -ivh MySQL-devel-4.1.12-1.i386.rpm
(3.)ubuntu安装
apt-get install libmysqlclient15-dev
(4.)最后一步php的配置选项添加--with-mysql=/usr即可!
4.No input file specified.location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}5. 如果php configure时缺库,可以先安装库(ubuntu下)
sudo apt-get install make bison flex gcc patch autoconf subversion locate
sudo apt-get install libxml2-dev libbz2-dev libpcre3-dev libssl-dev zlib1g-dev libmcrypt-dev libmhash-dev libmhash2 libcurl4-openssl-dev libpq-dev libpq5 libsyck0-dev6. mcrypt.h not found. Please reinstall libmcrypt
apt-get install libmcrypt-dev
或者
wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz
tar -zxvf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
mkdir -p /usr/local/libmcrytp
./configure prefix=/usr/local/libmcrytp/
make
make install7. php-fpm 5.4.7 如何关闭 重启?
php 5.4.7 下的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,需要使用信号控制:
master进程可以理解以下信号
INT, TERM 立刻终止 QUIT 平滑终止 USR1 重新打开日志文件 USR2 平滑重载所有worker进程并重新载入配置和二进制模块
示例:
php-fpm 关闭:
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
php-fpm 重启:
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
查看php-fpm进程数:
ps aux | grep -c php-fpm
8.命令行下执行php,提示找不到命令
-bash: /usr/bin/php: No such file or directory
vi /etc/profile
在文件底部增加一行配置
export PATH=/usr/local/php/bin:$PATH保存退出
source /etc/profile
http://www.nginx.cn/231.html
-
Navicat Lite不能访问mysql
2013-09-22 16:21:53
Navicat Lite不能访问mysql
解决办法如下:
1.首先查看防火墙是否关闭
2.防火墙关闭后,还不能访问时,则如下解决:
想都不用想,肯定是Mysql的访问权限问题。首先,通过终端(我用的是SSH)远程登录到Linux服务器,为了安全起见,先改一下Mysql数据的root用户密码:1234567891011[plain]
[hadoop@h1 ~]$ mysqladmin -u root
password
123456
[hadoop@h1 ~]$ mysql -uroot -p
Enter
password
:
Welcome
to
the MySQL monitor. Commands
end
with
;
or
\g.
Your MySQL
connection
id
is
13
Server version: 5.0.77 Source distribution
Type
'help;'
or
'\h'
for
help. Type
'\c'
to
clear the buffer.
mysql>
第二步,查询Mysql中所有用户的权限:意料之中,mysql的root用户只能通过本机访问,下面我们来改一下权限:123[plain]
mysql>
update
`
user
`
set
`host` =
'%'
where
`
user
` =
'root'
;
mysql> flush
privileges
;
测试一下,如图:操作成功,现在,你可以通过终端远程管理mysql数据库了。
-
centos下安装apache,php,mysql
2013-09-22 15:56:37
1.用云安装apache和PHP,使用命令:#yum install -y php
备注:使用yum命令时,需要查看一下DNS是否正常使用,是否可以ping www.baidu.com.
当使用yum时不能正常使用时,则需要将yum服务重启一下。
2.这个只装PHP
建议安装运行库及MYSQL的支持
#yum install -y php php-devel php-mysql
如果你的系统是Centos 5.6那么上面这么命令安装的是PHP 5.1,
要安装PHP5.3则执行下面的命令:
#yum install -y php53 php53-devel php53-mysql
自动安装启动
#service httpd restart3.会安装apache(也就是httpd),但是不会安装MySQL,MySQL需要单独安装. 安装MySQL命令:
#yum install -y mysql mysql-devel mysql-server 这条命令包括MySQL的运行库及服务端
安装好后,在浏览器上输入http://192.168.23.108
查看是否安装成功,如果不能访问的话,则看一下防火墙是否打开。4.测试 PHP 相关信息
这步实际上可以省略,但是为了测试是否安装成功,你可以新建一个 PHP 页面进行测试,使用 vim 编辑器新建:
[root@localhost ~]# vi /var/www/html/info.php按 “i” 键进行编辑,输入:
<?php phpinfo(); ?>编辑完毕,按 “ESC” 键退出编辑模式,接着输入:
:wq然后回车,即保存并退出。
此时你可以访问你的站点地址,例如 “http://192.168.1.2/info.php”,查看是否能看到相关的 PHP 信息。
看到这样的图,就说明 PHP 安装成功了。
五、将 PHP 模块和 MySQL 模块关联起来
还需要将 PHP 和 MySQL 关联起来,才能正常工作。搜索模块:
[root@localhost ~]# yum search php安装相关模块:
[root@localhost ~]# yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc需要重启 Apache 模块才能生效:
[root@localhost ~]# /etc/init.d/httpd restart再次刷新刚才建立的 “info.php” 页面,往下拉找到相关 MySQL 模块,看是否检测到相关信息。
如果看到如上图相关信息,则说明 MySQL 工作正常了。
-
Windows 不能在 本地计算机 启动 SQL Server 服务 错误代码126
2013-04-19 13:20:15
Windows 不能在 本地计算机 启动 SQL Server 服务 错误代码126
在使用SQL2005(或2008)是可能会遇到错误提示:
“Windows 不能在 本地计算机 启动 SQL Server 。
有关更多信息,查阅系统事件日志。如果这是非 Microsoft 服务,请与服务厂商联系,并参考特定服务错误代码126 ”
解决方法:
在2005(2008)的“配置工具”中有个“SQL Server Configuration Manager”-->SQLserver 2005(2008) 的网络配置,
在MSSOLSERVER和SQLEXPRESS中都有个VIA的属性,你那个服务无法启动就把那个VIA设置禁用。
然后重启一下服务,就可以了。
我试过了是在2008中无法启动服务,
查看MSSOLSERVER和SQLEXPRESS中都有个VIA的属性,将VIA设置为禁用,然后重启服务,就可以了,服务能正常启动。
VIA协议简介:
VIA
虚拟接口适配器 (VIA) 协议和 VIA 硬件一同使用。有关如何使用 VIA 的信息,请与硬件供应商联系。
重要提示
不推荐使用 VIA 协议。后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。
==========================================================================以上来自官方资料,别人都巴不得关掉此协议。很多原因也是此协议开启引起的。
----------------------------------------------------------------------------------------------------------------------
这个协议本是Wintel”联盟想出来的,W就是微软,inter就是硬件厂商了。
软硬联手造就了VIA,本来为了和不同的虚拟设备通信。
VIA全拼--virtual interface architecture,虚拟接口体系,任何设备都可以认为是虚拟设备,就是实现的抽象,本来为了适应不同的硬件厂商,适应不同的网络,或者java virtual machine,跨平台等,结果过于理想化,目标太大实现较为复杂,就走了水漂了。况且目前还是TCP/IP协议为至尊王者,剑走偏锋毕竟不会太远。将要被历史遗忘的东西LZ就不要过分关注了!
-
无法获得对数据库的独占访问权”的最终解决方案
2013-04-02 10:27:17
关于“因为数据库正在使用,所以无法获得对数据库的独占访问权”的最终解决方案
今天在使用SQL Server2005对某个数据库进行还原操作的时候,出现了如上图问题,经过多次反复尝试(包括关闭所有数据库连接、重启SQL Server服务、重启计算机)均以失败告终,很是郁闷,幸好之前有同事遇到过类似问题,帮我给解决了,而我也记下了下面这句解决此问题的关键SQL语 句:
ALTER DATABASE [JDZDJ] SET OFFLINE WITH ROLLBACK IMMEDIATE;
-
Linux-shell编程-04.控制流结构
2013-02-26 14:42:19
Linux-shell编程-04.控制流结构
命令:set nu是显示文本中的行数
CASE的编码
1 #!/bin/bash
2 #case select
3 echo -n "Enter a number from 1 to 3:"
4 read ANS
5 case $ANS in
6 1)
7 echo "You select 1"
8 ;;
9 2)
10 echo "You select 2"
11 ;;
12 3)
13 echo "You select 3"
14 ;;
15 *)
16 echo "'basename $0':This is not between 1 and 3">$2
17 exit;
18 ;;
19 esac
-
2012的过去,2013的继续
2013-01-22 11:06:36
时间飞逝,2012年就在这末日的传说中就这样过去了。感觉末日是已经到来过,只不过上天又给我们重新获得生命一样,在2013年让我们在继续的去努力,去奋斗,去完成自己的理想,为了自己的幸福,为了自己的事业而去奋斗着,一步一步的往前走着,一步一个脚印,坚持坚持的走完。
突然想到自己2013年的关健词那就是坚持,2012年自我感觉也是不够坚持,希望在这2013年能坚持的去做好每一件事情。不管是在个人感情还是事业,总之让自己为之努力吧。也在一次强调自己做什么事情还是要坚持。后来回顾2012想想,感觉自己确实不够坚持。在工作上总是口头说说,但又不会花太多的时间去做,所以还是让这些坏毛病就这么走了吧。从现在起要好好想2013的路应该怎么走了,还是一个词,自己决定的事还是要好好坚持的做完它。
那还是要回想一下2012年我做了些什么,跟以前的自己比一下。我在2012年有什么变化,虽然在2012年中公司整体的架构是有一些变化,但这不是理由,感觉2012年的后半段自己总是没有激情,没有活力,不象2011年那种有活力。不管做什么事情总是想把这些事情做好,但后半段感觉在公司里在混一样,一天不如一天。不知道是不是环境在打断这以往充满活力的自己,还是自己就希望这么没有活力的在混日子。其实总是在想如何去做,但又没方向一样。难道是要离开的时候了吗,还是说需要换个环境去调整一下自己。其实环境是一个原因,但最大的原因还是在于个人。自己虽然有想法,但不去做其实也是没什么滴,所以从今天起应该要打起精神来。在2013年能给自己设定个目标,为之努力去做吧。
2013年的目标是什么呢,还是一样学习为主,多学点语言的东西。明年把家里的事情处理完之后,也要准备一下考个本科,虽然感觉有点晚,但没有关系滴,相信自己可以完成滴。
相信自己是最重要滴!!!!!
-
Nginx出现“413 Request Entity Too Large”错误解决方法
2012-10-17 16:50:01
切换到传统文件上传界面,重新上传一个大文件,这回出来错误提示了,413 Request Entity Too Large,google了一下,发现是Nginx的错误提示。
解决方法:打开nginx主配置文件nginx.conf,找到http{}段,添加
client_max_body_size 20m;
Centos下 vi /usr/local/nginx/conf/nginx.conf重启NGINX
问题就解决喽!!!! -
SQL Server2008登录时,出现233错误
2012-10-17 10:56:15
sql server2008用户登录,出现233错误。
以下解决方法:
1.查看TCP/IP协议是否打开
2.主用户SA的状态是否显示正确,如:设置中的是否允许授予,及登录是否启用
3.数据库属性中是否支持SQL SERVER和windows身份验证模式
-
心事
2012-08-20 16:35:13
时间过的真快,不知不觉得已经在杭州工作有三年多啦。但年龄一年年的大上去,但学习的东西却没有变化。自己感觉根本就是一点也没长进,学习的知识还是挺多滴。但没有好好的去学习,还是停留在二年前的地方,没有什么成长,不是不想去学,而是不知道如何下手。为了赚钱而留在这里吗,还是在等待机会。但有时候感觉自己还不是够努力,总是活在自我感觉良好上。人的一生过的很快,真是在浪费青春,真象电视剧里的我的青春里说到“重新在走一回青春”。工作不如意,感情也不怎么样,真是两边不讨好呀,两边都没有做好。要钱没钱,要好工作没好工作。难道我真的不适合做测试,虽然做IT都是比较不怎么样滴的工作。但为了生活也是没有办法滴,为了什么而活。为了自己,还是为什么,我都已经搞不清楚啦,谁能告诉我呢
标题搜索
我的存档
数据统计
- 访问量: 82308
- 日志数: 46
- 建立时间: 2008-01-08
- 更新时间: 2017-02-03
清空Cookie - 联系我们 - 51Testing软件测试网 - 交流论坛 - 空间列表 - 站点存档 - 升级自己的空间
Powered by 51Testing
© 2003-2021
沪ICP备05003035号