测试与质量的关系
测试有助于提高软件的质量,但是提高软件的质量不能依赖于测试。测试与质量的关系很象在考试中“检查”与“成绩”的关系。
学习好的学生,在考试时通过认真检查能减少因疏忽而造成的答题错误,从而“提高”了考试成绩(取得他本来就该得的好成绩)。
而学习差的学生,他原本就不会做题目,无论检查多么细心,也不能提高成绩。
所以说,软件的高质量是设计出来的,而不是靠测试修补出来的。
I love U software testing
nginx与awstats的使用
上一篇 /
下一篇 2009-02-17 09:30:25
[root@test ~]# ls
awstats-6.9-1.noarch.rpm
|
安装awstats可以参考我的文章http://blog.chinaunix.net/u2/71666/showart.php?id=1988397完成向导,接下来修改 www.test.cn 的统计配置
[root@test awstats]# pwd
/etc/awstats [root@test awstats]# vi awstats.www.test.com.conf
找到统计的日志文件的路径
LogFile="/var/log/httpd/mylog.log"
改为
LogFile="/usr/local/nginx/logs/test.access_%YYYY-24%MM-24%DD-24.log"
LogFormat=1
改为 LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot %otherquot"
|
[root@test awstats]# cp awstats.www.test.com.conf awstats.www.good.cn.conf
[root@test awstats]# vi awstats.www.good.cn.conf
需要注意一下几行 awstats.www.good.com.conf LogFile="/usr/local/nginx/logs/good.access_%YYYY-24%MM-24%DD-24.log" LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot %otherquot" SiteDomain="www.good.com" HostAliases="good.com www.good.com 127.0.0.1 localhost"
|
默认编译安装的nginx对cgi的支持并不好(所以在编译的时候一般都没打开这个功能)
google了一把。大家都用fastcgi来支持。就照搬吧
[root@test html]# pwd
/usr/local/nginx/html
[root@test html]# mkdir cgi-bin
[root@test html]# cd cgi-bin/
[root@test cgi-bin]# vi fcgi_perl
#!/usr/bin/perl -w
use FCGI; use Socket; use FCGI::ProcManager; sub shutdown { FCGI::CloseSocket($socket); exit; } sub restart { FCGI::CloseSocket($socket); &main; } use sigtrap 'handler', \&shutdown, 'normal-signals'; use sigtrap 'handler', \&restart, 'HUP'; require 'syscall.ph'; use POSIX qw(setsid); #&daemonize; we don't daemonize when running under runsv
#this keeps the program alive or something after exec'ing perl scripts
END() { } BEGIN() { } { no warnings; *CORE::GLOBAL::exit = sub { die "fakeexit\nrc=" . shift() . "\n"; }; }; eval q{exit}; if ($@) { exit unless $@ =~ /^fakeexit/; } &main; sub daemonize() { chdir '/' or die "Can't chdir to /: $!"; defined( my $pid = fork ) or die "Can't fork: $!"; exit if $pid; setsid() or die "Can't start a new session: $!"; umask 0; } sub main { #如果使用 IP sockets
#$socket = FCGI::OpenSocket( "127.0.0.1:8999", 10 );
#如果使用 UNIX sockets
#$socket = FCGI::OpenSocket( "/var/run/perl_cgi-dispatch.sock", 10 );
#foreach $item (keys %ENV) { delete $ENV{$item}; }
#设置fastcgi进程数,默认四个
my $n_processes = $ENV{FCGI_NPROCESSES} || 4; $proc_manager = FCGI::ProcManager->new( {n_processes => $n_processes} ); #使用unix socket
$socket = FCGI::OpenSocket( "$ENV{FCGI_SOCKET_PATH}", 10 ); #设置Socket权限
chmod 0777, $ENV{FCGI_SOCKET_PATH}; ; #use UNIX sockets - user running this script. must have w access to the 'nginx' folder!!
$request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%req_params, $socket, &FCGI::FAIL_ACCEPT_ON_INTR ); $proc_manager->pm_manage(); if ($request) { request_loop() } FCGI::CloseSocket($socket); } sub request_loop { while ( $request->Accept() >= 0 ) { $proc_manager->pm_pre_dispatch(); #processing any STDIN input from WebServer (for CGI-POST actions)
$stdin_passthrough = ''; { no warnings; $req_len = 0 + $req_params{'CONTENT_LENGTH'}; }; if ( ( $req_params{'REQUEST_METHOD'} eq 'POST' ) && ( $req_len != 0 ) ) { my $bytes_read = 0; while ( $bytes_read < $req_len ) { my $data = ''; my $bytes = read( STDIN, $data, ( $req_len - $bytes_read ) ); last if ( $bytes == 0 || !defined($bytes) ); $stdin_passthrough .= $data; $bytes_read += $bytes; } } #running the cgi app
if ( ( -x $req_params{SCRIPT_FILENAME} ) && #can I execute this?
( -s $req_params{SCRIPT_FILENAME} ) && #Is this file empty?
( -r $req_params{SCRIPT_FILENAME} ) #can I read this file?
) { pipe( CHILD_RD, PARENT_WR ); pipe( PARENT_ERR, CHILD_ERR ); my $pid = open( CHILD_O, "-|" ); unless ( defined($pid) ) { print("Content-type: text/plain\r\n\r\n"); print "Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !\n"; next; } $oldfh = select(PARENT_ERR); $| = 1; select(CHILD_O); $| = 1; select($oldfh); if ( $pid > 0 ) { close(CHILD_RD); close(CHILD_ERR); print PARENT_WR $stdin_passthrough; close(PARENT_WR); $rin = $rout = $ein = $eout = ''; vec( $rin, fileno(CHILD_O), 1 ) = 1; vec( $rin, fileno(PARENT_ERR), 1 ) = 1;
|
收藏
举报
TAG: