stas 02/04/03 18:24:28 Modified: src/docs/1.0/guide Changes.pod control.pod debug.pod performance.pod perl.pod porting.pod scenario.pod snippets.pod troubleshooting.pod Log: - untabify the guide Revision Changes Path 1.6 +19 -19 modperl-docs/src/docs/1.0/guide/Changes.pod Index: Changes.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/Changes.pod,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- Changes.pod 3 Apr 2002 09:16:08 -0000 1.5 +++ Changes.pod 4 Apr 2002 02:24:27 -0000 1.6 @@ -1377,11 +1377,11 @@ * warnings.pod was renamed to troubleshooting.pod and now it's categorized by the following sections: - Building and Installation + Building and Installation Configuration and Startup Code Parsing and Compilation Runtime - Shutdown and Restart + Shutdown and Restart * porting: the following sections were moved to debug.pod: "Finding the Line Number the Error/Warning has been Triggered at", @@ -1583,7 +1583,7 @@ * porting: Wrote a whole new section "Configuration Files: Writing, Modifying and Reloading.", which consist of 3 big parts: - Writing Configuration Files + Writing Configuration Files Reloading Configuration Files Dynamically updating configuration files @@ -1714,18 +1714,18 @@ * A complete review, which included corrections, verifications, extensions and clarifications was done to the following pods during the preparation of the tutorial for the 3rd apache conference: - start.pod - intro.pod - porting.pod - performance.pod - strategy.pod - scenario.pod - config.pod - install.pod - control.pod - databases.pod - multiuser.pod - help.pod + start.pod + intro.pod + porting.pod + performance.pod + strategy.pod + scenario.pod + config.pod + install.pod + control.pod + databases.pod + multiuser.pod + help.pod =head1 06.19.1999 ver 1.13 @@ -2020,9 +2020,9 @@ * new in scenario.pod: "mod_perl and proxy server" - Incentives + Incentives Squid proxy server in httpd accelerator mode - Running a squid and 2 webservers scenario + Running a squid and 2 webservers scenario Running a squid and 1 mod_perl apache server scenario (Reviewed and modified according to notes by @@ -2189,7 +2189,7 @@ performance.html#Limiting_the_request_rate_speed_ * modified: register_cleanup in Registry scripts (END{} blocks) - based on the last week tread + based on the last week tread * new: obvious.html#Handling_the_User_pressed_Stop_ @@ -2229,7 +2229,7 @@ MaxClients MaxRequestsPerChild (actually a pointer to the next item) * new: performance: - Tuning the Apache's configuration variables for the best performance + Tuning the Apache's configuration variables for the best performance Tuning with ab - ApacheBench Tuning with crashme script Choosing MaxClients 1.8 +5 -5 modperl-docs/src/docs/1.0/guide/control.pod Index: control.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/control.pod,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- control.pod 3 Apr 2002 09:16:08 -0000 1.7 +++ control.pod 4 Apr 2002 02:24:27 -0000 1.8 @@ -1163,11 +1163,11 @@ # paths and add the standard Perl libs @INC = qw(/usr/lib/perl5/5.00503/i386-linux - /usr/lib/perl5/5.00503 - /usr/lib/perl5/site_perl/5.005/i386-linux - /usr/lib/perl5/site_perl/5.005 - . - ); + /usr/lib/perl5/5.00503 + /usr/lib/perl5/site_perl/5.005/i386-linux + /usr/lib/perl5/site_perl/5.005 + . + ); } use strict; 1.7 +9 -9 modperl-docs/src/docs/1.0/guide/debug.pod Index: debug.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/debug.pod,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- debug.pod 3 Apr 2002 09:16:08 -0000 1.6 +++ debug.pod 4 Apr 2002 02:24:27 -0000 1.7 @@ -1608,7 +1608,7 @@ # there are 29 days in February in a leap year $month_len[1] = (($year % 4 or $year % 100 == 0) and $year % 400 ) - ? 28 : 29; + ? 28 : 29; # set $day to be the last day of the previous month $day = $month_len[$month - 1]; @@ -1668,7 +1668,7 @@ # there are 29 days in February in a leap year $month_len[1] = (($year % 4 or $year % 100 == 0) and $year % 400 ) - ? 28 : 29; + ? 28 : 29; # set $day to be the last day of the previous month $day = $month_len[$month - 1]; @@ -1730,9 +1730,9 @@ { array => [qw(a b c d)], hash => { - foo => "oof", - bar => "rab", - }, + foo => "oof", + bar => "rab", + }, }; How do we print it out? Very easily: @@ -2717,10 +2717,10 @@ the original C<Apache::DB> cleanup code, as: if (ref $r) { - $SIG{INT} = \&DB::catch; - $r->register_cleanup(sub { - $SIG{INT} = \&DB::ApacheSIGINT(); - }); + $SIG{INT} = \&DB::catch; + $r->register_cleanup(sub { + $SIG{INT} = \&DB::ApacheSIGINT(); + }); } Any Perl/Tk guru to assist??? 1.8 +227 -227 modperl-docs/src/docs/1.0/guide/performance.pod Index: performance.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/performance.pod,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- performance.pod 3 Apr 2002 09:16:08 -0000 1.7 +++ performance.pod 4 Apr 2002 02:24:27 -0000 1.8 @@ -1523,7 +1523,7 @@ use Apache::RegistryLoader (); Apache::RegistryLoader->new->handler("/perl/test.pl", - "/home/httpd/perl/test.pl"); + "/home/httpd/perl/test.pl"); You should put this code either into C<E<lt>PerlE<gt>> sections or into a startup script. @@ -1554,7 +1554,7 @@ # preload $url my $status = $rl->handler($url); unless($status == 200) { - warn "pre-load of `$url' failed, status=$status\n"; + warn "pre-load of `$url' failed, status=$status\n"; } }, $scripts_root_dir); @@ -2784,31 +2784,31 @@ I will use the following abbreviations: - NR = Total Number of Request - NC = Concurrency - MC = MaxClients - MRPC = MaxRequestsPerChild - RPS = Requests per second + NR = Total Number of Request + NC = Concurrency + MC = MaxClients + MRPC = MaxRequestsPerChild + RPS = Requests per second Running a mod_perl script with lots of mysql queries (the script under test is mysqld limited) (http://www.example.com/perl/access/access.cgi?do_sub=query_form), with the configuration: - MinSpareServers 8 - MaxSpareServers 16 - StartServers 10 - MaxClients 50 + MinSpareServers 8 + MaxSpareServers 16 + StartServers 10 + MaxClients 50 MaxRequestsPerChild 5000 gives us: - NR NC RPS comment + NR NC RPS comment ------------------------------------------------ - 10 10 3.33 # not a reliable figure - 100 10 3.94 - 1000 10 4.62 - 1000 50 4.09 + 10 10 3.33 # not a reliable figure + 100 10 3.94 + 1000 10 4.62 + 1000 50 4.09 B<Conclusions:> Here I wanted to show that when the application is slow (not due to perl loading, code compilation and execution, but @@ -2824,20 +2824,20 @@ (http://www.example.com/perl/access/access.cgi), it's the same script but it just returns the HTML form, without making SQL queries. - MinSpareServers 8 - MaxSpareServers 16 - StartServers 10 - MaxClients 50 + MinSpareServers 8 + MaxSpareServers 16 + StartServers 10 + MaxClients 50 MaxRequestsPerChild 5000 - NR NC RPS comment + NR NC RPS comment ------------------------------------------------ - 10 10 26.95 # not a reliable figure - 100 10 30.88 - 1000 10 29.31 - 1000 50 28.01 - 1000 100 29.74 - 10000 200 24.92 + 10 10 26.95 # not a reliable figure + 100 10 30.88 + 1000 10 29.31 + 1000 50 28.01 + 1000 100 29.74 + 10000 200 24.92 100000 400 24.95 B<Conclusions:> This time the script we executed was pure perl (not @@ -2855,19 +2855,19 @@ C<MaxRequestsPerChild>, so that no child will be killed during the benchmarking. - MinSpareServers 50 - MaxSpareServers 50 - StartServers 50 - MaxClients 50 + MinSpareServers 50 + MaxSpareServers 50 + StartServers 50 + MaxClients 50 MaxRequestsPerChild 5000 - NR NC RPS comment + NR NC RPS comment ------------------------------------------------ - 100 10 32.05 - 1000 10 33.14 - 1000 50 33.17 - 1000 100 31.72 - 10000 200 31.60 + 100 10 32.05 + 1000 10 33.14 + 1000 50 33.17 + 1000 100 31.72 + 10000 200 31.60 Conclusion: In this scenario there is no overhead involving the parent server loading new children, all the servers are available, and the @@ -2876,21 +2876,21 @@ Now we will change C<MaxClients> and watch the results: Let's reduce C<MaxClients> to 10. - MinSpareServers 8 - MaxSpareServers 10 - StartServers 10 - MaxClients 10 + MinSpareServers 8 + MaxSpareServers 10 + StartServers 10 + MaxClients 10 MaxRequestsPerChild 5000 - NR NC RPS comment + NR NC RPS comment ------------------------------------------------ - 10 10 23.87 # not a reliable figure - 100 10 32.64 - 1000 10 32.82 - 1000 50 30.43 - 1000 100 25.68 - 1000 500 26.95 - 2000 500 32.53 + 10 10 23.87 # not a reliable figure + 100 10 32.64 + 1000 10 32.82 + 1000 50 30.43 + 1000 100 25.68 + 1000 500 26.95 + 2000 500 32.53 B<Conclusions:> Very little difference! Ten servers were able to serve almost with the same throughput as 50 servers. Why? My guess @@ -2902,35 +2902,35 @@ Now we will start drastically to reduce C<MaxRequestsPerChild>: - MinSpareServers 8 - MaxSpareServers 16 - StartServers 10 - MaxClients 50 + MinSpareServers 8 + MaxSpareServers 16 + StartServers 10 + MaxClients 50 - NR NC MRPC RPS comment + NR NC MRPC RPS comment ------------------------------------------------ - 100 10 10 5.77 - 100 10 5 3.32 - 1000 50 20 8.92 - 1000 50 10 5.47 - 1000 50 5 2.83 - 1000 100 10 6.51 + 100 10 10 5.77 + 100 10 5 3.32 + 1000 50 20 8.92 + 1000 50 10 5.47 + 1000 50 5 2.83 + 1000 100 10 6.51 B<Conclusions:> When we drastically reduce C<MaxRequestsPerChild>, the performance starts to become closer to plain mod_cgi. Here are the numbers of this run with mod_cgi, for comparison: - MinSpareServers 8 - MaxSpareServers 16 - StartServers 10 - MaxClients 50 + MinSpareServers 8 + MaxSpareServers 16 + StartServers 10 + MaxClients 50 - NR NC RPS comment + NR NC RPS comment ------------------------------------------------ - 100 10 1.12 - 1000 50 1.14 - 1000 100 1.13 + 100 10 1.12 + 1000 50 1.14 + 1000 100 1.13 B<Conclusion>: mod_cgi is much slower. :) In the first test, when NR/NC was 100/10, mod_cgi was capable of 1.12 requests per second. In @@ -3099,22 +3099,22 @@ Let's try some numbers. For a heavily loaded web site and a dedicated machine I would think of (note 400Mb is just for example): - Available to webserver RAM: 400Mb + Available to webserver RAM: 400Mb Child's memory size bounded: 10Mb - MaxClients: 400/10 = 40 (larger with mem sharing) - StartServers: 20 - MinSpareServers: 20 - MaxSpareServers: 35 + MaxClients: 400/10 = 40 (larger with mem sharing) + StartServers: 20 + MinSpareServers: 20 + MaxSpareServers: 35 However if I want to use the server for many other tasks, but make it capable of handling a high load, I'd think of: - Available to webserver RAM: 400Mb + Available to webserver RAM: 400Mb Child's memory size bounded: 10Mb - MaxClients: 400/10 = 40 - StartServers: 5 - MinSpareServers: 5 - MaxSpareServers: 10 + MaxClients: 400/10 = 40 + StartServers: 5 + MinSpareServers: 5 + MaxSpareServers: 10 These numbers are taken off the top of my head, and shouldn't be used as a rule, but rather as examples to show you some possible scenarios. @@ -3458,23 +3458,23 @@ This is a typical generated trace. stat("/home/httpd/docs/foo/test", 0xbffff8fc) = -1 ENOENT - (No such file or directory) + (No such file or directory) stat("/home/httpd/docs/foo", 0xbffff8fc) = -1 ENOENT - (No such file or directory) + (No such file or directory) stat("/home/httpd/docs", - {st_mode=S_IFDIR|0755, st_size=1024, ...}) = 0 + {st_mode=S_IFDIR|0755, st_size=1024, ...}) = 0 open("/.htaccess", O_RDONLY) = -1 ENOENT - (No such file or directory) + (No such file or directory) open("/home/.htaccess", O_RDONLY) = -1 ENOENT - (No such file or directory) + (No such file or directory) open("/home/httpd/.htaccess", O_RDONLY) = -1 ENOENT - (No such file or directory) + (No such file or directory) open("/home/httpd/docs/.htaccess", O_RDONLY) = -1 ENOENT - (No such file or directory) + (No such file or directory) stat("/home/httpd/docs/test", 0xbffff774) = -1 ENOENT - (No such file or directory) + (No such file or directory) stat("/home/httpd/docs", - {st_mode=S_IFDIR|0755, st_size=1024, ...}) = 0 + {st_mode=S_IFDIR|0755, st_size=1024, ...}) = 0 Now we modify the C<E<lt>DirectoryE<gt>> entry and add S<AllowOverride None>, which among other things disables I<.htaccess> files and will not try @@ -3487,15 +3487,15 @@ We see that the four open() calls for I<.htaccess> have gone. stat("/home/httpd/docs/foo/test", 0xbffff8fc) = -1 ENOENT - (No such file or directory) + (No such file or directory) stat("/home/httpd/docs/foo", 0xbffff8fc) = -1 ENOENT - (No such file or directory) + (No such file or directory) stat("/home/httpd/docs", - {st_mode=S_IFDIR|0755, st_size=1024, ...}) = 0 + {st_mode=S_IFDIR|0755, st_size=1024, ...}) = 0 stat("/home/httpd/docs/test", 0xbffff774) = -1 ENOENT - (No such file or directory) + (No such file or directory) stat("/home/httpd/docs", - {st_mode=S_IFDIR|0755, st_size=1024, ...}) = 0 + {st_mode=S_IFDIR|0755, st_size=1024, ...}) = 0 Let's try to shortcut the I<foo> location with: @@ -3989,15 +3989,15 @@ Apache::RegistryLoader->new->handler( "/perl/processing_with_cgi_pm.pl", "[ROOT_DIR]/httpd/perl/processing_with_cgi_pm.pl" - ); + ); Apache::RegistryLoader->new->handler( "/perl/processing_with_apache_request.pl", "[ROOT_DIR]/httpd/perl/processing_with_apache_request.pl" - ); + ); Apache::RegistryLoader->new->handler( "/perl/processing_with_apache_args.pl", "[ROOT_DIR]/httpd/perl/processing_with_apache_args.pl" - ); + ); </Perl> And the results: @@ -4772,7 +4772,7 @@ $sth->execute; while(@row_ary = $sth->fetchrow_array) { - # do DB accumulation into some variable + # do DB accumulation into some variable } # print the output using the data returned from the DB @@ -4866,7 +4866,7 @@ print "SQL: $do_sql \n" if $debug; - $dbh->{RaiseError} = 1; # do this, or check every call for errors + $dbh->{RaiseError} = 1; # do this, or check every call for errors $sth = $dbh->prepare($do_sql); $sth->execute; # Bind perl variables to columns. @@ -4905,32 +4905,32 @@ sub { # Header - if (@_ and !$header){ - print "<TABLE>\n"; - print $q->Tr(map{ $q->td($_) } @fields ); - $header = 1; - } - - # Body - if (@_) { - print $q->Tr(map{$q->td($_)} @_ ); - $counter++; - return; - } - + if (@_ and !$header){ + print "<TABLE>\n"; + print $q->Tr(map{ $q->td($_) } @fields ); + $header = 1; + } + + # Body + if (@_) { + print $q->Tr(map{$q->td($_)} @_ ); + $counter++; + return; + } + # Tail, will be printed only at the end - if ($header and !($tail or @_)){ - print "</TABLE>\n $counter records found"; - $tail = 1; - return; - } - + if ($header and !($tail or @_)){ + print "</TABLE>\n $counter records found"; + $tail = 1; + return; + } + # No record found - unless ($header){ - print $q->p($q->center($q->b("No record was found!\n"))); - } + unless ($header){ + print $q->p($q->center($q->b("No record was found!\n"))); + } - } # end of sub {} + } # end of sub {} }; # end of my $rsub = eval { You might also want to check the section L<Preventing Your Processes @@ -5437,14 +5437,14 @@ use Apache::DBI (); Apache::DBI->connect_on_init("DBI:mysql:test", - "login", - "passwd", - { - RaiseError => 1, - PrintError => 0, - AutoCommit => 1, - } - ); + "login", + "passwd", + { + RaiseError => 1, + PrintError => 0, + AutoCommit => 1, + } + ); This is a simple way to have Apache children establish connections on server startup. This call should be in a startup file C<require()d> @@ -5508,38 +5508,38 @@ # ... my $dbh = DBI->connect('dbi:Oracle:host', 'user', 'pass') - || die $DBI::errstr; + || die $DBI::errstr; my $baz = $r->param('baz'); eval { - my $sth = $dbh->prepare(qq{ - SELECT foo - FROM bar - WHERE baz = $baz - }); - $sth->execute; - - while (my @row = $sth->fetchrow_array) { - # do HTML stuff - } - - $sth->finish; - - my $sph = $dbh->prepare(qq{ - BEGIN - my_procedure( - arg_in => $baz - ); - END; - }); - $sph->execute; - $sph->finish; - - $dbh->commit; + my $sth = $dbh->prepare(qq{ + SELECT foo + FROM bar + WHERE baz = $baz + }); + $sth->execute; + + while (my @row = $sth->fetchrow_array) { + # do HTML stuff + } + + $sth->finish; + + my $sph = $dbh->prepare(qq{ + BEGIN + my_procedure( + arg_in => $baz + ); + END; + }); + $sph->execute; + $sph->finish; + + $dbh->commit; }; if ($@) { - $dbh->rollback; + $dbh->rollback; } $dbh->disconnect; @@ -5631,40 +5631,40 @@ # ... my $dbh = DBI->connect('dbi:Oracle:host', 'user', 'pass') - || die $DBI::errstr; + || die $DBI::errstr; my $baz = $r->param('baz'); eval { - my $sth = $dbh->prepare(qq{ - SELECT foo - FROM bar - WHERE baz = :baz - }); - $sth->bind_param(':baz', $baz); - $sth->execute; - - while (my @row = $sth->fetchrow_array) { - # do HTML stuff - } - - $sth->finish; - - my $sph = $dbh->prepare(qq{ - BEGIN - my_procedure( - arg_in => :baz - ); - END; - }); - $sph->bind_param(':baz', $baz); - $sph->execute; - $sph->finish; - - $dbh->commit; + my $sth = $dbh->prepare(qq{ + SELECT foo + FROM bar + WHERE baz = :baz + }); + $sth->bind_param(':baz', $baz); + $sth->execute; + + while (my @row = $sth->fetchrow_array) { + # do HTML stuff + } + + $sth->finish; + + my $sph = $dbh->prepare(qq{ + BEGIN + my_procedure( + arg_in => :baz + ); + END; + }); + $sph->bind_param(':baz', $baz); + $sph->execute; + $sph->finish; + + $dbh->commit; }; if ($@) { - $dbh->rollback; + $dbh->rollback; } # ... @@ -5710,38 +5710,38 @@ use DBI (); sub connect { - if (defined $My::DB::conn) { - eval { - $My::DB::conn->ping; - }; - if (!$@) { - return $My::DB::conn; - } - } - - $My::DB::conn = DBI->connect( - 'dbi:Oracle:server', 'user', 'pass', { - PrintError => 1, - RaiseError => 1, - AutoCommit => 0 - } - ) || die $DBI::errstr; #Assume application handles this - - $My::DB::select = $My::DB::conn->prepare(q{ - SELECT foo - FROM bar - WHERE baz = :baz - }); - - $My::DB::procedure = $My::DB::conn->prepare(q{ - BEGIN - my_procedure( - arg_in => :baz - ); - END; - }); + if (defined $My::DB::conn) { + eval { + $My::DB::conn->ping; + }; + if (!$@) { + return $My::DB::conn; + } + } - return $My::DB::conn; + $My::DB::conn = DBI->connect( + 'dbi:Oracle:server', 'user', 'pass', { + PrintError => 1, + RaiseError => 1, + AutoCommit => 0 + } + ) || die $DBI::errstr; #Assume application handles this + + $My::DB::select = $My::DB::conn->prepare(q{ + SELECT foo + FROM bar + WHERE baz = :baz + }); + + $My::DB::procedure = $My::DB::conn->prepare(q{ + BEGIN + my_procedure( + arg_in => :baz + ); + END; + }); + + return $My::DB::conn; } 1; @@ -5754,22 +5754,22 @@ my $baz = $r->param('baz'); eval { - my $sth = $My::DB::select; - $sth->bind_param(':baz', $baz); - $sth->execute; - - while (my @row = $sth->fetchrow_array) { - # do HTML stuff - } - - my $sph = $My::DB::procedure; - $sph->bind_param(':baz', $baz); - $sph->execute; - - $dbh->commit; + my $sth = $My::DB::select; + $sth->bind_param(':baz', $baz); + $sth->execute; + + while (my @row = $sth->fetchrow_array) { + # do HTML stuff + } + + my $sph = $My::DB::procedure; + $sph->bind_param(':baz', $baz); + $sph->execute; + + $dbh->commit; }; if ($@) { - $dbh->rollback; + $dbh->rollback; } # ... 1.5 +20 -20 modperl-docs/src/docs/1.0/guide/perl.pod Index: perl.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/perl.pod,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- perl.pod 3 Apr 2002 09:16:08 -0000 1.4 +++ perl.pod 4 Apr 2002 02:24:28 -0000 1.5 @@ -577,18 +577,18 @@ which generates: anon normal: - CODE(0x80568e4) - CODE(0x80568e4) - CODE(0x80568e4) - CODE(0x80568e4) - CODE(0x80568e4) + CODE(0x80568e4) + CODE(0x80568e4) + CODE(0x80568e4) + CODE(0x80568e4) + CODE(0x80568e4) anon closure: - CODE(0x804b4c0) - CODE(0x8056b54) - CODE(0x8056bb4) - CODE(0x80594d8) - CODE(0x8059538) + CODE(0x804b4c0) + CODE(0x8056b54) + CODE(0x8056bb4) + CODE(0x80594d8) + CODE(0x8059538) Note how each code reference from the non-closure is identical, but the closure form must generate distinct coderefs to point at the @@ -613,18 +613,18 @@ which generates: anon normal: - CODE(0x80568c0) - CODE(0x80568c0) - CODE(0x80568c0) - CODE(0x80568c0) - CODE(0x80568c0) + CODE(0x80568c0) + CODE(0x80568c0) + CODE(0x80568c0) + CODE(0x80568c0) + CODE(0x80568c0) anon closure: - CODE(0x8056998) - CODE(0x8056998) - CODE(0x8056998) - CODE(0x8056998) - CODE(0x8056998) + CODE(0x8056998) + CODE(0x8056998) + CODE(0x8056998) + CODE(0x8056998) + CODE(0x8056998) We can see that both versions has generated the same code reference. For the subroutine I<a> it's easy, since it doesn't include 1.5 +83 -85 modperl-docs/src/docs/1.0/guide/porting.pod Index: porting.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/porting.pod,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- porting.pod 20 Mar 2002 17:43:04 -0000 1.4 +++ porting.pod 4 Apr 2002 02:24:28 -0000 1.5 @@ -409,7 +409,7 @@ sub authenticate{ my ($username,$passwd) = @_; - # some checking + # some checking $authenticated = 1 if SOME_USER_PASSWD_CHECK_IS_OK; } @@ -438,7 +438,7 @@ sub authenticate{ my ($username,$passwd) = @_; - # some checking + # some checking return (SOME_USER_PASSWD_CHECK_IS_OK) ? 1 : 0; } @@ -935,23 +935,22 @@ use vars qw(%c); - %c = - ( + %c = ( dir => { - cgi => "/home/httpd/perl", - docs => "/home/httpd/docs", - img => "/home/httpd/docs/images", - }, + cgi => "/home/httpd/perl", + docs => "/home/httpd/docs", + img => "/home/httpd/docs/images", + }, url => { - cgi => "/perl", - docs => "/", - img => "/images", - }, + cgi => "/perl", + docs => "/", + img => "/images", + }, color => { - hint => "#777777", - warn => "#990066", - normal => "#000000", - }, + hint => "#777777", + warn => "#990066", + normal => "#000000", + }, ); Good perl style suggests keeping a comma at the end of lists. That's @@ -989,23 +988,22 @@ use strict; use vars qw(%c); - %c = - ( + %c = ( dir => { - cgi => "/home/httpd/perl", - docs => "/home/httpd/docs", - img => "/home/httpd/docs/images", - }, + cgi => "/home/httpd/perl", + docs => "/home/httpd/docs", + img => "/home/httpd/docs/images", + }, url => { - cgi => "/perl", - docs => "/", - img => "/images", - }, + cgi => "/perl", + docs => "/", + img => "/images", + }, color => { - hint => "#777777", - warn => "#990066", - normal => "#000000", - }, + hint => "#777777", + warn => "#990066", + normal => "#000000", + }, ); And the code: @@ -1053,10 +1051,10 @@ ( base => "/home/httpd", dir => { - cgi => "$c{base}/perl", - docs => "$c{base}/docs", - img => "$c{base}{docs}/images", - }, + cgi => "$c{base}/perl", + docs => "$c{base}/docs", + img => "$c{base}{docs}/images", + }, ); But nothing stops us from adding additional variables, which are @@ -1066,10 +1064,10 @@ %c = ( dir => { - cgi => "$base/perl", - docs => "$base/docs", - img => "$base/docs/images", - }, + cgi => "$base/perl", + docs => "$base/docs", + img => "$base/docs/images", + }, ); You have just learned how to make configuration files easily @@ -1423,12 +1421,12 @@ # print warnings if there are any invalid changes print $q->hr, $q->p($q->b(qq{Warning! These variables were changed - but found malformed, thus the original - values will be preserved.}) - ), + but found malformed, thus the original + values will be preserved.}) + ), join(",<BR>", - map { $q->b($vars_to_change{$_}) . " : $malformatted{$_}\n" - } keys %malformatted) + map { $q->b($vars_to_change{$_}) . " : $malformatted{$_}\n" + } keys %malformatted) if %malformatted; # Now complete the vars that weren't changed from the @@ -1442,8 +1440,8 @@ # escape single quotes "'" while creating a file my $content = join "\n", map { $updates{$_} =~ s/(['\\])/\\$1/g; - '$c{' . $_ . "} = '" . $updates{$_} . "';\n" - } keys %updates; + '$c{' . $_ . "} = '" . $updates{$_} . "';\n" + } keys %updates; # now add '1;' to make require() happy $content .= "\n1;"; @@ -1452,7 +1450,7 @@ eval {my $res = $content}; if ($@) { print qq{Warning! Something went wrong with config file - generation!<P> The error was : <BR><PRE>$@</PRE>}; + generation!<P> The error was : <BR><PRE>$@</PRE>}; return; } @@ -1464,7 +1462,7 @@ open $fh, ">$dynamic_config_file.bak" or die "Can't open $dynamic_config_file.bak for writing :$! \n"; flock $fh,2; # exclusive lock - seek $fh,0,0; # rewind to the start + seek $fh,0,0; # rewind to the start truncate $fh, 0; # the file might shrink! print $fh $content; close $fh; @@ -1491,8 +1489,8 @@ print $q->hr, $q->p(qq{This form allows you to dynamically update the current - configuration. You don\'t need to restart the server in - order for changes to take an effect} + configuration. You don\'t need to restart the server in + order for changes to take an effect} ); # set the previous settings in the form's hidden fields, so we @@ -1506,45 +1504,45 @@ push @configs, map { $q->td( - $q->b("$vars_to_change{$_}:"), - ), + $q->b("$vars_to_change{$_}:"), + ), $q->td( - $q->textfield(-name => $_, - -default => $c{$_}, - -override => 1, - -size => 20, - -maxlength => 50, - ) - ), - } qw(name release); + $q->textfield(-name => $_, + -default => $c{$_}, + -override => 1, + -size => 20, + -maxlength => 50, + ) + ), + } qw(name release); # prepare multiline textarea entries push @configs, map { $q->td( - $q->b("$vars_to_change{$_}:"), - ), + $q->b("$vars_to_change{$_}:"), + ), $q->td( - $q->textarea(-name => $_, - -default => $c{$_}, - -override => 1, - -rows => 10, - -columns => 50, - -wrap => "HARD", - ) - ), - } qw(comments); + $q->textarea(-name => $_, + -default => $c{$_}, + -override => 1, + -rows => 10, + -columns => 50, + -wrap => "HARD", + ) + ), + } qw(comments); print $q->startform('POST',$q->url),"\n", - $q->center($q->table(map {$q->Tr($_),"\n",} @configs), - $q->submit('','Update!'),"\n", - ), - map ({$q->hidden("prev_".$_, $q->param("prev_".$_))."\n" } - keys %vars_to_change), # hidden previous values - $q->br,"\n", - $q->endform,"\n", - $q->hr,"\n", - $q->end_html; + $q->center($q->table(map {$q->Tr($_),"\n",} @configs), + $q->submit('','Update!'),"\n", + ), + map ({$q->hidden("prev_".$_, $q->param("prev_".$_))."\n" } + keys %vars_to_change), # hidden previous values + $q->br,"\n", + $q->endform,"\n", + $q->hr,"\n", + $q->end_html; } # end sub conf_modification_form @@ -3198,9 +3196,9 @@ # change status form my $button_label = $status ? "Stop" : "Start"; print qq{<HR> - <FORM> - <INPUT TYPE=SUBMIT NAME=switch VALUE=" $button_label "> - </FORM> + <FORM> + <INPUT TYPE=SUBMIT NAME=switch VALUE=" $button_label "> + </FORM> }; print qq{</BODY></HTML>}; @@ -3528,9 +3526,9 @@ # change status form my $button_label = $status ? "Stop" : "Start"; print qq{<HR> - <FORM> - <INPUT TYPE=SUBMIT NAME=switch VALUE=" $button_label "> - </FORM> + <FORM> + <INPUT TYPE=SUBMIT NAME=switch VALUE=" $button_label "> + </FORM> }; print qq{</BODY></HTML>}; 1.7 +4 -4 modperl-docs/src/docs/1.0/guide/scenario.pod Index: scenario.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/scenario.pod,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- scenario.pod 3 Apr 2002 09:16:08 -0000 1.6 +++ scenario.pod 4 Apr 2002 02:24:28 -0000 1.7 @@ -405,14 +405,14 @@ % /usr/bin/perl Makefile.PL \ APACHE_SRC=../apache_x.x.x/src \ - DO_HTTPD=1 USE_APACI=1 EVERYTHING=1 \ + DO_HTTPD=1 USE_APACI=1 EVERYTHING=1 \ APACHE_PREFIX=/usr/local/httpd_perl \ - APACI_ARGS='--prefix=/usr/local/httpd_perl' + APACI_ARGS='--prefix=/usr/local/httpd_perl' If you need to pass any other configuration options to Apache's C<configure>, add them after the I<--prefix> option. e.g: - APACI_ARGS='--prefix=/usr/local/httpd_perl \ + APACI_ARGS='--prefix=/usr/local/httpd_perl \ --enable-module=status' Notice that B<all> C<APACI_ARGS> (above) must be passed as one long @@ -1431,7 +1431,7 @@ Listen 4077 <VirtualHost localhost:4077> ServerName www.example.com - DocumentRoot /home/httpd/docs/www.example.com + DocumentRoot /home/httpd/docs/www.example.com DirectoryIndex index.shtml index.html </VirtualHost> 1.7 +30 -30 modperl-docs/src/docs/1.0/guide/snippets.pod Index: snippets.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/snippets.pod,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- snippets.pod 3 Apr 2002 09:16:08 -0000 1.6 +++ snippets.pod 4 Apr 2002 02:24:28 -0000 1.7 @@ -97,7 +97,7 @@ my $why = shift; chomp $why; - my $orig_why = $why; # an ASCII copy for email report + my $orig_why = $why; # an ASCII copy for email report # handle the shell execution case (so we will not get all the HTML) print("Error: $why\n"), exit unless $ENV{MOD_PERL}; @@ -113,41 +113,41 @@ if ($orig_why =~ /Client attempted to POST (\d+) bytes/o) { $message = qq{ - You cannot POST messages bigger than - @{[1024*$max_image_size]} bytes.<BR> - You have tried to post $1 bytes<BR> - If you are trying to upload an image, make sure its - size is no bigger than @{[1024*$max_image_size]} - bytes.<P> - Thank you! - }; + You cannot POST messages bigger than + @{[1024*$max_image_size]} bytes.<BR> + You have tried to post $1 bytes<BR> + If you are trying to upload an image, make sure its + size is no bigger than @{[1024*$max_image_size]} + bytes.<P> + Thank you! + }; } elsif ($orig_why =~ /Malformed multipart POST/o) { $message = qq{ - Have you tried to upload an image in the wrong way?<P> - To successfully upload an image you must use a browser that supports - image upload and use the 'Browse' button to select that image. - DO NOT type the path to the image into the upload field.<P> - Thank you! - }; + Have you tried to upload an image in the wrong way?<P> + To successfully upload an image you must use a browser that supports + image upload and use the 'Browse' button to select that image. + DO NOT type the path to the image into the upload field.<P> + Thank you! + }; } elsif ($orig_why =~ /closed socket during multipart read/o) { $message = qq{ - Have you pressed a 'STOP' button?<BR> - Please try again!<P> - Thank you! - }; + Have you pressed a 'STOP' button?<BR> + Please try again!<P> + Thank you! + }; } else { $message = qq{ - <B>You need take no action since - the error report has already been - sent to the webmaster. <BR><P> - <B>Thank you for your patience!</B> - }; + <B>You need take no action since + the error report has already been + sent to the webmaster. <BR><P> + <B>Thank you for your patience!</B> + }; $should_email = 1; } @@ -158,7 +158,7 @@ <HTML><BODY BGCOLOR="white"> <B>Oops, Something went wrong.</B><P> $message - </BODY></HTML>}; + </BODY></HTML>}; # send email report if appropriate if ($should_email){ @@ -183,7 +183,7 @@ print STDERR "[".scalar localtime()."] [SIGDIE] $orig_why \n"; exit 1; - } # end of sub mydie + } # end of sub mydie You may have noticed that I trap the CGI.pm's die() calls here, I @@ -760,10 +760,10 @@ # init the server my $smtp = Net::SMTP->new( - # $smtp_server, - Timeout => 60, - Debug => 0, - ); + # $smtp_server, + Timeout => 60, + Debug => 0, + ); $smtp->mail($from) or carp ("Failed to specify a sender [$from]\n"); $smtp->to($to) or carp ("Failed to specify a recipient [$to]\n"); 1.7 +3 -3 modperl-docs/src/docs/1.0/guide/troubleshooting.pod Index: troubleshooting.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/troubleshooting.pod,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- troubleshooting.pod 3 Apr 2002 09:16:08 -0000 1.6 +++ troubleshooting.pod 4 Apr 2002 02:24:28 -0000 1.7 @@ -127,7 +127,7 @@ =head2 RegistryLoader: Translation of uri [...] to filename failed RegistryLoader: Translation of uri [/home/httpd/perl/test.pl] to filename - failed [tried: /home/httpd/docs/home/httpd/perl/test.pl] + failed [tried: /home/httpd/docs/home/httpd/perl/test.pl] This error shows up when C<Apache::RegistryLoader> fails to translate the URI into the corresponding filesystem path. Most failures happen @@ -341,8 +341,8 @@ /usr/apps/lib/perl5/site_perl/5.005/aix/Apache/Registry.pm line 168 Apache::Registry::compile('package - Apache::ROOT::perl::tmp_2epl;use Apache qw(exit);sub han...') - called at + Apache::ROOT::perl::tmp_2epl;use Apache qw(exit);sub han...') + called at /usr/apps/lib/perl5/site_perl/5.005/aix/Apache/Registry.pm line 121 Apache::Registry::handler('Apache=SCALAR(0x205026c0)')
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]