cvs commit: modperl-docs/src/docs/2.0/user/handlers protocols.pod
stas2003/02/17 01:43:21 Modified:src/docs/2.0/api/Apache Reload.pod src/docs/2.0/user/handlers protocols.pod Log: document: PerlPreConnectionHandler Apache::Reload Revision ChangesPath 1.2 +14 -2 modperl-docs/src/docs/2.0/api/Apache/Reload.pod Index: Reload.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/Apache/Reload.pod,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Reload.pod27 Jan 2003 04:05:12 - 1.1 +++ Reload.pod17 Feb 2003 09:43:21 - 1.2 @@ -9,6 +9,9 @@ PerlModule Apache::Reload PerlInitHandler Apache::Reload + # when working with protocols and connection filters + # PerlPreConnectionHandler Apache::Reload + # Reload groups of modules: # httpd.conf: PerlModule Apache::Reload @@ -57,11 +60,20 @@ =head2 Monitor All Modules in C<%INC> -To monitor and reload all modules in C<%INC>, simply add the following -configuration to your I: +To monitor and reload all modules in C<%INC> at the beginning of +request's processing, simply add the following configuration to your +I: PerlModule Apache::Reload PerlInitHandler Apache::Reload + +When working with connection filters and protocol modules +C should be invoked in the pre_connection stage: + + PerlPreConnectionHandler Apache::Reload + +See also the discussion on +C>. =head2 Register Modules Implicitly 1.4 +0 -3 modperl-docs/src/docs/2.0/user/handlers/protocols.pod Index: protocols.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/handlers/protocols.pod,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- protocols.pod 12 Nov 2002 17:04:37 - 1.3 +++ protocols.pod 17 Feb 2003 09:43:21 - 1.4 @@ -73,9 +73,6 @@ C>, because it's not known yet which resource the request will be mapped to. -XXX: As of this moment C is not being -executed by mod_perl. Stay tuned. - Example: A I handler accepts connection record and socket - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/devel/debug c.pod
stas2003/02/16 19:28:06 Modified:src/docs/2.0/devel/debug c.pod Log: typo Revision ChangesPath 1.4 +1 -1 modperl-docs/src/docs/2.0/devel/debug/c.pod Index: c.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/debug/c.pod,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- c.pod 31 Dec 2002 04:07:37 - 1.3 +++ c.pod 17 Feb 2003 03:28:06 - 1.4 @@ -738,7 +738,7 @@ The mod_perl I's include a rule for macro expansions which you can find by looking for the C rule. To expand all macros in -a certain C file, you should run C, which will create +a certain C file, you should run C, which will create I with all macros expanded in it. For example to create I with all macros used in I: - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/devel/core coding_style.pod
stas2003/02/16 14:50:32 Modified:src/docs/2.0/devel/core coding_style.pod Log: typos Revision ChangesPath 1.2 +2 -2 modperl-docs/src/docs/2.0/devel/core/coding_style.pod Index: coding_style.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/core/coding_style.pod,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- coding_style.pod 9 Dec 2002 16:29:57 - 1.1 +++ coding_style.pod 16 Feb 2003 22:50:32 - 1.2 @@ -131,7 +131,7 @@ always add it even if it's not required, so when you add a new statement you don't have to remember to add C<;> on a previous line. -Do:0 +Do: sub foo { statement1; @@ -139,7 +139,7 @@ statement3; } -Don't +Don't: sub foo { statement1; - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/compat compat.pod
stas2003/02/12 15:51:01 Modified:src/docs/2.0/user/compat compat.pod Log: document the new Apache::compat methods: $connection->auth_type $connection->user Revision ChangesPath 1.43 +18 -1 modperl-docs/src/docs/2.0/user/compat/compat.pod Index: compat.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/compat/compat.pod,v retrieving revision 1.42 retrieving revision 1.43 diff -u -r1.42 -r1.43 --- compat.pod29 Jan 2003 07:18:33 - 1.42 +++ compat.pod12 Feb 2003 23:51:00 - 1.43 @@ -617,8 +617,25 @@ supported. For a complete info on these see I. +=head1 C -=head1 Apache::File +=head2 C<$connection-Eauth_type> + +The record I doesn't exist in the Apache 2.0's connection +struct. It exists only in the request record struct. +C provides a back compatibility method, though it +relies on the availability of the global Crequest>, which +requires the configuration to have: + + PerlOptions +GlobalRequest + +to set it up for earlier stages than response handler. + +=head2 C<$connection-Euser> + +See Cauth_type|/C__connection_E_gt_auth_type_>>. + +=head1 C The methods from mod_perl 1.0's module C have been either moved to other packages or removed. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/general/perl_reference perl_reference.pod
stas2003/02/08 18:05:21 Modified:src/docs/1.0/guide install.pod modules.pod porting.pod strategy.pod src/docs/general/os/win32 faq.pod src/docs/general/perl_reference perl_reference.pod Log: correct internal xref links Revision ChangesPath 1.21 +7 -4 modperl-docs/src/docs/1.0/guide/install.pod Index: install.pod === RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/install.pod,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- install.pod 29 Jan 2003 23:44:15 - 1.20 +++ install.pod 9 Feb 2003 02:05:19 - 1.21 @@ -1203,10 +1203,13 @@ the I convention, instead of using hardcoded version numbers. Remember to replace the I place-holders with the version numbers of the distributions you are about to use. To find out the latest -stable version number, visit the components' sites. So if I say -http://perl.apache.org/dist/mod_perl-1.xx.tar.gz , go to -http://perl.apache.org/dist/ in order to learn the version number of -the latest stable release and download the appropriate file. +stable version number, visit the components' sites. So if the +instructions say: + + http://perl.apache.org/dist/mod_perl-1.xx.tar.gz + +go to http://perl.apache.org/download/ in order to learn the version +number of the latest stable release and download the appropriate file. Unless otherwise noted, all the components install themselves into a default location. When you run C the installation 1.14 +1 -1 modperl-docs/src/docs/1.0/guide/modules.pod Index: modules.pod === RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/modules.pod,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- modules.pod 3 Dec 2002 14:38:37 - 1.13 +++ modules.pod 9 Feb 2003 02:05:19 - 1.14 @@ -124,7 +124,7 @@ =head1 Apache::DBI - Initiate a persistent database connection See L +Databases|guide::databases/Apache__DBI___Initiate_a_persistent_database_connection> =head1 Apache::Watchdog::RunAway - Hanging Processes Monitor and Terminator 1.17 +30 -26modperl-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.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- porting.pod 25 Nov 2002 22:00:33 - 1.16 +++ porting.pod 9 Feb 2003 02:05:19 - 1.17 @@ -39,12 +39,12 @@ It can be a good idea to tighten up some of your Perl programming practices, since mod_perl doesn't tolerate sloppy programming. -This chapter relies on a certain level of Perl knowledge. Please -read through the L chapter and make sure you -know the material covered there. This will allow me to concentrate on -pure mod_perl issues and make them more prominent to the experienced -Perl programmer, which would otherwise be lost in the sea of Perl -background notes. +This chapter relies on a certain level of Perl knowledge. Please read +through the L +chapter and make sure you know the material covered there. This will +allow me to concentrate on pure mod_perl issues and make them more +prominent to the experienced Perl programmer, which would otherwise be +lost in the sea of Perl background notes. Additional resources: @@ -136,7 +136,8 @@ opposed to anonymous - subroutine defined inside another subroutine) that refers to a lexically scoped variable defined outside this nested subroutine. This effect is explained in L. +Nested +Subroutines|general::perl_reference::perl_reference/my___Scoped_Variable_in_Nested_Subroutines>. Do you see a nested named subroutine in my script? I don't! What's going on? Maybe it's a bug? But wait, maybe the perl interpreter sees @@ -483,7 +484,8 @@ } To make sure you don't miss these bugs always test your CGI in -L. +L. To solve this particular C modifier problem refer to L. @@ -498,7 +500,7 @@ =head1 @INC and mod_perl The basic Perl C<@INC> behaviour is explained in section L. +do(), %INC and @INC Explained|general::perl_reference::perl_reference/userequiredo_INC_and__INC_Explained>. When running under mod_perl, once the server is up C<@INC> is frozen and cannot be updated. The only opportunity to I modify @@ -1201,7 +1203,7 @@ variables on its first invocation. To do that, you would need to replace each occurrence of return() and warn() with die(). If you do that, take a look at t
cvs commit: modperl-docs/src/outstanding/stats graph.jpg input.data netcraft.html pseudo-graph.jpg securityspace.html
stas2003/02/05 15:48:08 Modified:src/outstanding/stats graph.jpg input.data netcraft.html pseudo-graph.jpg securityspace.html Log: jan2003 update Revision ChangesPath 1.12 +156 -146 modperl-docs/src/outstanding/stats/graph.jpg <> 1.12 +1 -0 modperl-docs/src/outstanding/stats/input.data Index: input.data === RCS file: /home/cvs/modperl-docs/src/outstanding/stats/input.data,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- input.data2 Jan 2003 00:49:04 - 1.11 +++ input.data5 Feb 2003 23:48:07 - 1.12 @@ -1,4 +1,5 @@ # this file must have the columns \t separated +January 2003 4108930 458057 December 20024082690 461309 November 20023943776 462402 October 2002 3753202 434418 1.12 +1 -0 modperl-docs/src/outstanding/stats/netcraft.html Index: netcraft.html === RCS file: /home/cvs/modperl-docs/src/outstanding/stats/netcraft.html,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- netcraft.html 2 Jan 2003 00:49:04 - 1.11 +++ netcraft.html 5 Feb 2003 23:48:07 - 1.12 @@ -31,6 +31,7 @@ SurveyHostnamesUnique IP Addresses + January 2003 4108930458057 December 2002 4082690461309 November 2002 3943776462402 October 2002 3753202434418 1.12 +37 -45modperl-docs/src/outstanding/stats/pseudo-graph.jpg <> 1.13 +2 -2 modperl-docs/src/outstanding/stats/securityspace.html Index: securityspace.html === RCS file: /home/cvs/modperl-docs/src/outstanding/stats/securityspace.html,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- securityspace.html2 Jan 2003 00:49:04 - 1.12 +++ securityspace.html5 Feb 2003 23:48:07 - 1.13 @@ -7,12 +7,12 @@ SecuritySpace provides an http://www.securityspace.com/s_survey/data/man.200212/apachemods.html?mod=cGVybA==";>Apache +href="http://www.securityspace.com/s_survey/data/man.200301/apachemods.html?mod=cGVybA==";>Apache Module Report on mod_perl comprising statistics and a graph based on the data collected by http://www.securityspace.com/";>www.securityspace.com. They also feature http://www.securityspace.com/s_survey/data/man.200212/apachemods.html";>a +href="http://www.securityspace.com/s_survey/data/man.200301/apachemods.html";>a comparison between all the Apache modules they survey. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/general/testing testing.pod
stas2003/02/02 22:45:08 Modified:src/docs/general/testing testing.pod Log: doh, yet another L<> fix Revision ChangesPath 1.11 +1 -1 modperl-docs/src/docs/general/testing/testing.pod Index: testing.pod === RCS file: /home/cvs/modperl-docs/src/docs/general/testing/testing.pod,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- testing.pod 3 Feb 2003 06:34:27 - 1.10 +++ testing.pod 3 Feb 2003 06:45:08 - 1.11 @@ -2375,7 +2375,7 @@ tests, such as: C, C, C, C, C, C, C, and C. See the -C> manpage for +C> manpage for more information. =head2 Auto Configuration - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/general/testing testing.pod
stas2003/02/02 22:34:27 Modified:src/docs/general/testing testing.pod Log: pod fix Revision ChangesPath 1.10 +1 -1 modperl-docs/src/docs/general/testing/testing.pod Index: testing.pod === RCS file: /home/cvs/modperl-docs/src/docs/general/testing/testing.pod,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- testing.pod 3 Feb 2003 06:33:57 - 1.9 +++ testing.pod 3 Feb 2003 06:34:27 - 1.10 @@ -2375,7 +2375,7 @@ tests, such as: C, C, C, C, C, C, C, and C. See the -C manpage for +C> manpage for more information. =head2 Auto Configuration - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/general/testing testing.pod
stas2003/02/02 22:33:57 Modified:src/docs/general/testing testing.pod Log: add a section that pointers to other Apache::TestUtil methods Revision ChangesPath 1.9 +9 -0 modperl-docs/src/docs/general/testing/testing.pod Index: testing.pod === RCS file: /home/cvs/modperl-docs/src/docs/general/testing/testing.pod,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- testing.pod 22 Jan 2003 06:59:42 - 1.8 +++ testing.pod 3 Feb 2003 06:33:57 - 1.9 @@ -2369,6 +2369,15 @@ plan(), ok() and other functions() will work correctly more than one test is running under the same interpreter. +=head2 Helper Functions + +C provides several helper functions for writing +tests, such as: C, C, C, +C, C, C, C, and +C. See the +C manpage for +more information. + =head2 Auto Configuration If the test is comprised only from the request part, you have to - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/handlers filters.pod
stas2003/02/02 21:45:24 Modified:src/docs/2.0/user/handlers filters.pod Log: fix a bug in examples, use base for Apache::Filter, to inherit the sub attributes Revision ChangesPath 1.11 +2 -2 modperl-docs/src/docs/2.0/user/handlers/filters.pod Index: filters.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/handlers/filters.pod,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- filters.pod 9 Dec 2002 16:47:41 - 1.10 +++ filters.pod 3 Feb 2003 05:45:23 - 1.11 @@ -848,7 +848,7 @@ use strict; use warnings; - use Apache::Filter (); + use base qw(Apache::Filter); use Apache::Const -compile => qw(OK); @@ -944,7 +944,7 @@ use strict; use warnings; - use Apache::Filter; + use base qw(Apache::Filter); use APR::Brigade (); use APR::Bucket (); - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/config config.pod
stas2003/02/02 19:22:09 Modified:src/docs/2.0/user/config config.pod Log: fix the explanation for 'PerlInterpScope handler' Revision ChangesPath 1.35 +3 -3 modperl-docs/src/docs/2.0/user/config/config.pod Index: config.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/config/config.pod,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- config.pod31 Jan 2003 23:07:57 - 1.34 +++ config.pod3 Feb 2003 03:22:09 - 1.35 @@ -774,9 +774,9 @@ PerlInterpScope handler -With this configuration, an interpreter will be selected before -C are run, and put back immediately afterwards, -before Apache moves onto the authentication phase. If a +For example if C is configured, an interpreter will +be selected before running the handler, and put back immediately +afterwards, before Apache moves onto the next phase. If a C is configured further down the chain, another interpreter will be selected and again put back afterwards, before C is run. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/config config.pod
stas2003/01/31 15:07:57 Modified:src/docs/2.0/user/config config.pod Log: - fix /-Mblib/-Mlib/ - add a note that Apache2 and other perl modules need to be reloaded for +Parent Revision ChangesPath 1.34 +11 -3 modperl-docs/src/docs/2.0/user/config/config.pod Index: config.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/config/config.pod,v retrieving revision 1.33 retrieving revision 1.34 diff -u -r1.33 -r1.34 --- config.pod29 Jan 2003 23:28:06 - 1.33 +++ config.pod31 Jan 2003 23:07:57 - 1.34 @@ -347,19 +347,27 @@ one for each CVirtualHostE>, each with its own namespace and pointing to a different paths in C<@INC>: -META: is -Mblib portable? (problems with -Mlib on Darwin/5.6.0?) +META: is -Mlib portable? (problems with -Mlib on Darwin/5.6.0?) ServerName dev1 PerlOptions +Parent - PerlSwitches -Mblib=/home/dev1/lib/perl + PerlSwitches -Mlib=/home/dev1/lib/perl + PerlModule Apache2 ServerName dev2 PerlOptions +Parent - PerlSwitches -Mblib=/home/dev2/lib/perl + PerlSwitches -Mlib=/home/dev2/lib/perl + PerlModule Apache2 + +Remember that C<+Parent> gives you a completely new Perl interpreters +pool, so all your modifications to C<@INC> and preloading of the +modules should be done again. Consider using L if you want to inherit from the parent Perl +interpreter. Or even for a given location, for something like "dirty" cgi scripts: - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/help help.pod
stas2003/01/31 15:07:08 Modified:src/docs/2.0/user/help help.pod Log: how to create report without having t/REPORT Revision ChangesPath 1.17 +7 -2 modperl-docs/src/docs/2.0/user/help/help.pod Index: help.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/help/help.pod,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- help.pod 9 Dec 2002 16:47:41 - 1.16 +++ help.pod 31 Jan 2003 23:07:08 - 1.17 @@ -59,11 +59,16 @@ The C utility is autogenerated when C is run, so you should have it already after building mod_perl. +META: soon we will have C report script which will be +installed system-wide. For now, if you don't have the source, you can +create the report by running the following: + + % perl -MApache2 -MApache::TestReportPerl \ + -le 'Apache::TestReportPerl->new->run' + Now add the problem description to the report and send it to the L. -META: soon we will have C report script which will be -installed system-wide =head2 Problem Description - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/intro start_fast.pod
stas2003/01/30 16:32:35 Modified:src/docs/2.0/user/install install.pod src/docs/2.0/user/intro start_fast.pod Log: stress again that Apache and Perl have to be built and installed before proceeding. Revision ChangesPath 1.36 +3 -0 modperl-docs/src/docs/2.0/user/install/install.pod Index: install.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/install/install.pod,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- install.pod 18 Jan 2003 01:35:55 - 1.35 +++ install.pod 31 Jan 2003 00:32:35 - 1.36 @@ -234,6 +234,9 @@ =head2 Configuring mod_perl +Before you proceed make sure that Apache 2.0 has been built and +installed. mod_perl B be built before that. + % cd modperl-2.0 % perl Makefile.PL MP_AP_PREFIX=$HOME/httpd/prefork \ MP_INST_APACHE2=1 1.11 +3 -1 modperl-docs/src/docs/2.0/user/intro/start_fast.pod Index: start_fast.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/intro/start_fast.pod,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- start_fast.pod27 Jan 2003 04:05:13 - 1.10 +++ start_fast.pod31 Jan 2003 00:32:35 - 1.11 @@ -16,7 +16,9 @@ Before installing mod_perl, you need check that you have the L. +prerequisites|docs::2.0::user::install::install/Prerequisites> B. +Apache and the right Perl version have to be built and installed +B you can proceed with building mod_perl. In this chapter we assume that httpd was installed under I<$HOME/httpd/prefork>. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/1.0/guide install.pod
stas2003/01/29 15:44:15 Modified:src/docs/1.0/guide install.pod Log: use italic for files Revision ChangesPath 1.20 +1 -1 modperl-docs/src/docs/1.0/guide/install.pod Index: install.pod === RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/install.pod,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- install.pod 29 Jan 2003 22:27:38 - 1.19 +++ install.pod 29 Jan 2003 23:44:15 - 1.20 @@ -1559,7 +1559,7 @@ --enable-module=rewrite % make -Note: C and C do not exist at this time. They +Note: I and I do not exist at this time. They will be generated during compilation. =item 1 - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/config config.pod
stas2003/01/29 15:28:06 Modified:src/docs/2.0/user/config config.pod Log: - add an item "Is There a Way to Modify @INC on a Per-VirtualHost" so it's easier to find the info - update the link to Apache::Directive - update maintainers Revision ChangesPath 1.33 +14 -12modperl-docs/src/docs/2.0/user/config/config.pod Index: config.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/config/config.pod,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- config.pod10 Jan 2003 04:26:57 - 1.32 +++ config.pod29 Jan 2003 23:28:06 - 1.33 @@ -199,8 +199,8 @@ I handler, with the C handler, you can gain even more performance. (This handler isn't available in mod_perl 1.0.) -Unless the C callback running under the C -handler is configured with: +Unless the C callback, running under the C +handler, is configured with: PerlOptions +SetupEnv @@ -1032,17 +1032,19 @@ =head1 Perl Interface to the Apache Configuration Tree -META: any volunteers to write this section? see -t/response/TestApache/conftree.pm for examples of using the api. - -L. - - +For now refer to the +L manpage and the +test I in the mod_perl source +distribution. +META: need help to write the tutorial section on this with examples. +=head1 General Issues +=head2 Is There a Way to Modify C<@INC> on a Per-VirtualHost +You can, using the L option. =head1 Maintainers @@ -1054,10 +1056,6 @@ =item * -Doug MacEachern Edougm (at) covalent.netE - -=item * - Stas Bekman Estas (at) stason.orgE =back @@ -1069,6 +1067,10 @@ =item * Doug MacEachern Edougm (at) covalent.netE + +=item * + +Stas Bekman Estas (at) stason.orgE =back - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/1.0/guide install.pod
stas2003/01/29 14:27:38 Modified:src/docs/1.0/guide install.pod Log: adding two notes to docs/1.0/guide/install.pod explaing that libperl.a (and libphp4.a) are not expected to be in the src/modules dir during ./configure Submitted by: Thomas Klausner <[EMAIL PROTECTED]> Reviewed by: stas Revision ChangesPath 1.19 +6 -0 modperl-docs/src/docs/1.0/guide/install.pod Index: install.pod === RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/install.pod,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- install.pod 31 Dec 2002 19:24:25 - 1.18 +++ install.pod 29 Jan 2003 22:27:38 - 1.19 @@ -1036,6 +1036,9 @@ C<--prefix=/usr/share/apache> the Apache directory tree will be installed in I. +Note that the files activated by C<--activate-module> do not exist at +this time. They will be generated during compilation. + The last three steps build, test and install the Apache-side of the mod_perl enabled server. Presumably your new server includes third-party components, otherwise you probably won't choose this @@ -1555,6 +1558,9 @@ --enable-module=stats \ --enable-module=rewrite % make + +Note: C and C do not exist at this time. They +will be generated during compilation. =item 1 - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/compat compat.pod
stas2003/01/28 23:18:33 Modified:src/docs/2.0/user/compat compat.pod Log: add notes about building 3rd party extension Makefile.PL's with 2.0, when XS is used Revision ChangesPath 1.42 +21 -0 modperl-docs/src/docs/2.0/user/compat/compat.pod Index: compat.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/compat/compat.pod,v retrieving revision 1.41 retrieving revision 1.42 diff -u -r1.41 -r1.42 --- compat.pod27 Jan 2003 04:05:13 - 1.41 +++ compat.pod29 Jan 2003 07:18:33 - 1.42 @@ -812,8 +812,29 @@ C<:method> attribute is not required. +=head1 C +For those who write 3rd party modules using XS, this module was used +to supply mod_perl specific include paths, defines and other things, +needed for building the extensions. mod_perl 2.0 makes things +transparent with C. +Here is how to write a simple I for modules wanting to +build XS code against mod_perl 2.0: + + use Apache2; + use mod_perl 1.99; + use ModPerl::MM (); + + ModPerl::MM::WriteMakefile( + NAME => "Foo", + ); + +and everything will be done for you. + +META: we probably will have a compat layer at some point. + +META: move this section to the devel/porting and link there instead =head1 C - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/handlers http.pod
stas2003/01/28 23:13:04 Modified:src/docs/2.0/user/handlers http.pod Log: add a note about stacked handlers being different from single handlers in the handling of their return status Revision ChangesPath 1.12 +8 -0 modperl-docs/src/docs/2.0/user/handlers/http.pod Index: http.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/handlers/http.pod,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- http.pod 27 Jan 2003 04:05:13 - 1.11 +++ http.pod 29 Jan 2003 07:13:03 - 1.12 @@ -63,6 +63,14 @@ connection output filters before it's sent to the client. We will talk about filters in detail later in this chapter. +Before discussing each handler in detail remember that if you use +stacked handlers feature (META: add link to where it's discussed [go +read 1.0 docs for now, as it works the same]) all handlers in the +chain will be run as long as they return C or +C. Because stacked handlers is a special case. So +don't be surprised if you've returned C and the next +handler was still executed. This is a feature, not a bug. + Now let's discuss each of the mentioned handlers in detail. =head2 PerlPostReadRequestHandler - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/devel/porting porting.pod
stas2003/01/28 21:19:31 Modified:src/docs/2.0/devel/porting porting.pod Log: don't forget to load Apache2 Revision ChangesPath 1.6 +9 -3 modperl-docs/src/docs/2.0/devel/porting/porting.pod Index: porting.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/porting/porting.pod,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- porting.pod 29 Jan 2003 05:14:17 - 1.5 +++ porting.pod 29 Jan 2003 05:19:31 - 1.6 @@ -64,12 +64,18 @@ To require a module to run only under 2.0, simply add: + use Apache2; use mod_perl 2.0; -to your module. You can also use the variable C<$mod_perl::VERSION>. +to your module. You can also use the variable +C<$mod_perl::VERSION>. But you should always load C first, so +it'll adjust C<@INC>, if mod_perl 2.0 is installed on the same base +with mod_perl 1.0. -(META: Well before 2.0 is released you really have to say: -C) +META: Well before 2.0 is released you really have to say: + + use Apache2; + use mod_perl 1.99; In the configuration file you can use a special configuration "define" symbol C which is enabled internally, as if the server had - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/devel/porting porting.pod
stas2003/01/28 21:14:18 Modified:src/docs/2.0/devel/porting porting.pod Log: we still don't have 2.0, so should require 1.99 Revision ChangesPath 1.5 +3 -0 modperl-docs/src/docs/2.0/devel/porting/porting.pod Index: porting.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/porting/porting.pod,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- porting.pod 13 Jan 2003 04:52:37 - 1.4 +++ porting.pod 29 Jan 2003 05:14:17 - 1.5 @@ -68,6 +68,9 @@ to your module. You can also use the variable C<$mod_perl::VERSION>. +(META: Well before 2.0 is released you really have to say: +C) + In the configuration file you can use a special configuration "define" symbol C which is enabled internally, as if the server had been started with C<-DMODPERL2>. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/api/Apache Directive.pod
stas2003/01/28 19:51:42 Modified:src/docs/2.0/api/Apache Directive.pod Log: spel Revision ChangesPath 1.2 +2 -2 modperl-docs/src/docs/2.0/api/Apache/Directive.pod Index: Directive.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/Apache/Directive.pod,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Directive.pod 29 Jan 2003 03:40:39 - 1.1 +++ Directive.pod 29 Jan 2003 03:51:42 - 1.2 @@ -45,7 +45,7 @@ internal Apache configuration. Internally, this information is stored in a tree structure. Each node -in the tree has a reference to it's parent (if it's not the root), its +in the tree has a reference to its parent (if it's not the root), its first child (if any), and to its next sibling. =head1 Class Methods @@ -68,7 +68,7 @@ $node = $node->next; -Returns the next sibbling of C<$node>, C otherwise +Returns the next sibling of C<$node>, C otherwise =head2 C - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/api/Apache Directive.pod
stas2003/01/28 19:40:39 Modified:src/docs/2.0/api config.cfg Added: src/docs/2.0/api/Apache Directive.pod Log: Apache::Directive pod (committed with some tweaks) Submitted by: Philippe M. Chiasson <[EMAIL PROTECTED]> Reviewed by: stas Revision ChangesPath 1.15 +1 -0 modperl-docs/src/docs/2.0/api/config.cfg Index: config.cfg === RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/config.cfg,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- config.cfg29 Jan 2003 02:47:12 - 1.14 +++ config.cfg29 Jan 2003 03:40:38 - 1.15 @@ -18,6 +18,7 @@ group=> 'Apache:: Core API', chapters => [qw( Apache/Log.pod +Apache/Directive.pod Apache/RequestRec.pod Apache/RequestUtil.pod Apache/ServerUtil.pod 1.1 modperl-docs/src/docs/2.0/api/Apache/Directive.pod Index: Directive.pod === =head1 NAME Apache::Directive -- A Perl API for manipulating Apache configuration tree =head1 Synopsis use Apache::Directive; my $tree = Apache::Directive->conftree; my $documentroot = $tree->lookup('DocumentRoot'); my $vhost = $tree->lookup('VirtualHost', 'localhost:8000'); my $servername = $vhost->{'ServerName'}; print $tree->as_string; use Data::Dumper; print Dumper($tree->as_hash); my $node = $tree; while ($node) { #do something with $node if (my $kid = $node->first_child) { $node = $kid; } elsif (my $next = $node->next) { $node = $next; } else { if (my $parent = $node->parent) { $node = $parent->next; } else { $node = undef; } } } =head1 Description C allows its users to search and navigate the internal Apache configuration. Internally, this information is stored in a tree structure. Each node in the tree has a reference to it's parent (if it's not the root), its first child (if any), and to its next sibling. =head1 Class Methods Function arguments (if any) and return values are shown in the function's synopsis. =head2 C $tree = Apache::Directive->conftree(); Returns the root of the configuration tree. =head1 Object Methods Function arguments (if any) and return values are shown in the function's synopsis. =head2 C $node = $node->next; Returns the next sibbling of C<$node>, C otherwise =head2 C $subtree = $node->first_child; Returns the first child node of C<$node>, undef otherwise =head2 C $parent = $node->parent; Returns the parent of C<$node>, undef if this node is the root node =head2 C $name = $node->directive; Returns the name of the directive in C<$node>. =head2 C $args = $node->args; Returns the arguments to this C<$node> =head2 C $fname = $node->filename; Returns the filename this C<$node> was created from =head2 C $lineno = $node->line_number; Returns the line number in C this C<$node> was created from =head2 C print $tree->as_string(); Returns a string representation of the configuration tree, in httpd.conf format. =head2 C $config = $tree->as_hash(); Returns a hash representation of the configuration tree, in a format suitable for inclusion in the EPerlE sections. =head2 C lookup($directive, [$args]) Returns node(s) matching a certain value. In list context, it will return all matching nodes. In scalar context, it will return only the first matching node. If called with only one C<$directive> value, this will return all nodes from that directive: @Alias = $tree->lookup('Alias'); Would return all nodes for Alias directives. If called with an extra C<$args> argument, this will return only nodes where both the directive and the args matched: $VHost = $tree->lookup('VirtualHosts', '_default_:8000'); =head1 Authors =head1 Copyright =cut - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/api/Apache RequestUtil.pod ServerUtil.pod
stas2003/01/28 18:47:12 Modified:src/docs/2.0/api config.cfg src/docs/2.0/api/Apache ServerUtil.pod Added: src/docs/2.0/api/Apache RequestUtil.pod Log: a skeleton for the request util api Revision ChangesPath 1.14 +1 -0 modperl-docs/src/docs/2.0/api/config.cfg Index: config.cfg === RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/config.cfg,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- config.cfg28 Jan 2003 07:26:29 - 1.13 +++ config.cfg29 Jan 2003 02:47:12 - 1.14 @@ -19,6 +19,7 @@ chapters => [qw( Apache/Log.pod Apache/RequestRec.pod +Apache/RequestUtil.pod Apache/ServerUtil.pod Apache/SubProcess.pod Apache/compat.pod 1.2 +6 -0 modperl-docs/src/docs/2.0/api/Apache/ServerUtil.pod Index: ServerUtil.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/Apache/ServerUtil.pod,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ServerUtil.pod27 Jan 2003 04:05:12 - 1.1 +++ ServerUtil.pod29 Jan 2003 02:47:12 - 1.2 @@ -118,6 +118,12 @@ =item * push_handlers() + $s->push_handlers(PerlResponseHandler => \&handler); + $s->push_handlers(PerlResponseHandler => [\&handler, \&handler2]); + + # XXX: not implemented yet + $s->push_handlers(PerlResponseHandler => sub {...}); + =item * add_handlers() =item * get_handlers() 1.1 modperl-docs/src/docs/2.0/api/Apache/RequestUtil.pod Index: RequestUtil.pod === =head1 NAME Apache::RequestUtil -- Methods for work with Apache::Request object =head1 SYNOPSIS use Apache::RequestUtil; =head1 DESCRIPTION C provides the Perl API for Apache request object. META: complete =head1 API Function arguments (if any) and return values are shown in the function's synopsis. =head2 FUNCTIONS =over =item * Apache-Erequest() =back =head2 METHODS =over =item * new() =item * server_name() =item * server_port() =item * dir_config() =item * get_status_line() =item * is_initial_req() =item * method_register() =item * add_config() =item * location() =item * location_merge() =item * no_cache() =item * pnotes() =item * set_basic_credentials() =item * as_string() =item * push_handlers() $r->push_handlers(PerlResponseHandler => \&handler); $r->push_handlers(PerlResponseHandler => [\&handler, \&handler2]); # XXX: not implemented yet $r->push_handlers(PerlResponseHandler => sub {...}); =item * add_handlers() =item * get_handlers() =back =cut - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/api/Apache Status.pod
stas2003/01/27 23:26:29 Modified:src/docs/2.0/api config.cfg Added: src/docs/2.0/api/Apache Status.pod Log: - add the docs for Apache::Status - create a new group of docs for non-core API Revision ChangesPath 1.13 +13 -8 modperl-docs/src/docs/2.0/api/config.cfg Index: config.cfg === RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/config.cfg,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- config.cfg27 Jan 2003 04:05:12 - 1.12 +++ config.cfg28 Jan 2003 07:26:29 - 1.13 @@ -9,21 +9,28 @@ The Apache::, APR:: and ModPerl:: namespaces APIs for mod_perl 2.0 EOB - body => { - bot => 'index_bot.html', - }, +body => { +bot => 'index_bot.html', +}, -group=> 'Apache::', +# NOTE: please keep the names sorted + +group=> 'Apache:: Core API', chapters => [qw( Apache/Log.pod -Apache/Reload.pod Apache/RequestRec.pod Apache/ServerUtil.pod Apache/SubProcess.pod Apache/compat.pod )], -group=> 'APR::', +group=> 'Apache:: Non-Core (Helper Apps)', +chapters => [qw( +Apache/Reload.pod +Apache/Status.pod +)], + +group=> 'APR:: Core API', chapters => [qw( APR/PerlIO.pod APR/Table.pod @@ -37,7 +44,5 @@ ModPerl/RegistryCooker.pod ModPerl/RegistryLoader.pod )], - - ); 1.1 modperl-docs/src/docs/2.0/api/Apache/Status.pod Index: Status.pod === =head1 NAME Apache::Status - Embedded interpreter status information =head1 SYNOPSIS SetHandler modperl PerlResponseHandler Apache::Status =head1 DESCRIPTION The B module provides some information about the status of the Perl interpreter embedded in the server. Configure like so: SetHandler modperl PerlResponseHandler Apache::Status Notice that under the "modperl" core handler the I menu option will show only the environment under that handler. To see the environment seen by handlers running under the "perl-script" core handler, configure C as: SetHandler perl-script PerlResponseHandler Apache::Status Other modules can "plugin" a menu item like so: Apache::Status->menu_item( 'DBI' => "DBI connections", #item for Apache::DBI module sub { my($r,$q) = @_; #request and CGI objects my(@strings); push @strings, "blobs of html"; return [EMAIL PROTECTED]; #return an array ref } ) if Apache->module("Apache::Status"); #only if Apache::Status is loaded B: Apache::Status must be loaded before these modules via the PerlModule or PerlRequire directives. =head1 OPTIONS =over 4 =item StatusOptionsAll This single directive will enable all of the options described below. PerlSetVar StatusOptionsAll On =item StatusDumper When browsing symbol tables, the values of arrays, hashes and scalars can be viewed via B<Data::Dumper> if this configuration variable is set to On: PerlSetVar StatusDumper On =item StatusPeek With this option On and the B module installed, functions and variables can be viewed ala B style: PerlSetVar StatusPeek On =item StatusLexInfo With this option On and the B module installed, subroutine lexical variable information can be viewed. PerlSetVar StatusLexInfo On =item StatusDeparse With this option On and B version 0.59 or higher (included in Perl 5.005_59+), subroutines can be "deparsed". PerlSetVar StatusDeparse On Options can be passed to B::Deparse::new like so: PerlSetVar StatusDeparseOptions "-p -sC" See the B manpage for details. =item StatusTerse With this option On, text-based op tree graphs of subroutines can be displayed, thanks to B. PerlSetVar StatusTerse On =item StatusTerseSize With this option On and the B module installed, text-based op tree graphs of subroutines and their size can be displayed. See the B docs for more info. PerlSetVar StatusTerseSize On =item StatusTerseSizeMainSummary With this option On and the B module installed, a "Memory Usage" will be added to the Apache::Status main menu. This option is disabled by default, as it can be rather c
cvs commit: modperl-docs/bin site_build
stas2003/01/27 15:04:27 Modified:bin site_build Log: doh! someone has modified the live script, without committing it. never change anything on the live site, but only on your machine and update via cvs. otherwise an automatic 'cvs up' may break things and create a havoc Revision ChangesPath 1.10 +13 -5 modperl-docs/bin/site_build Index: site_build === RCS file: /home/cvs/modperl-docs/bin/site_build,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- site_build27 Jan 2003 23:00:48 - 1.9 +++ site_build27 Jan 2003 23:04:26 - 1.10 @@ -21,7 +21,7 @@ umask 0002; my $HOME = $ENV{HOME}; -$ENV{PATH} = "/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/bin:/usr/X11R6/bin:$HOME"; +$ENV{PATH} = "/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/bin:/usr/X11R6/bin:$HOME/bin"; $ENV{PERL5LIB} = "$HOME/lib/perl5/5.00503:$HOME/lib/perl5/site_perl/5.005:$HOME/lib/perl5/site_perl:$HOME/lib/perl5"; @@ -67,9 +67,17 @@ } sub fs_is_full { -my $x = qx{ df | grep /x2 }; -my ($s) = ($x =~ /(\d+)\%/); -# when size(fs)>=95 we most likely will fail to create files -return $s > 94 ? 1 : 0; +# get available disk space +my $disk = qx{ df | grep /x2 }; +my ($disk_avail) = ($disk =~ /(\d+)\s+\d+\%/); # avail is before capacity + +# get size of site +my $site = qx{ du -c $rel | grep total }; +my ($site_size) = ($site =~ /^(\d+)/); + +# print "site_size = $site_size , disk_avail = $disk_avail"; + +# give us a margin of 50MB +return $site_size + 50*1024 > $disk_avail ? 1 : 0; } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/bin site_build
stas2003/01/27 15:00:48 Modified:bin site_build Log: support the verbose mode Revision ChangesPath 1.9 +5 -3 modperl-docs/bin/site_build Index: site_build === RCS file: /home/cvs/modperl-docs/bin/site_build,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- site_build21 Nov 2002 19:50:33 - 1.8 +++ site_build27 Jan 2003 23:00:48 - 1.9 @@ -3,9 +3,10 @@ # # this script does different things depending on how it was named (or # a symlink) if the name includes: -# force - the whole site is rebuilt -# pdf - builds pdfs -# index - builds the index +# force - the whole site is rebuilt +# pdf - builds pdfs +# index - builds the index +# verbose - turn the verbose mode on # # the easiest way is to use symlinks to the same script # @@ -45,6 +46,7 @@ my $flags = ''; $flags .= 'f' if $name =~ /force/; $flags .= 'd' if $name =~ /pdf/; +$flags .= 'v' if $name =~ /verbose/; $flags = $flags ? "-$flags" : ""; system("cvs up -dP >/dev/null 2>&1"); - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/api README
stas2003/01/27 01:02:28 Modified:src/docs/2.0/api README Log: reality update Revision ChangesPath 1.2 +0 -17 modperl-docs/src/docs/2.0/api/README Index: README === RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/README,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- README2 Oct 2001 15:26:29 - 1.1 +++ README27 Jan 2003 09:02:28 - 1.2 @@ -3,26 +3,9 @@ autogenerated it's much easier to keep the documentation in a separate place. -Each sub-project will have its own directory under docs/src/api - -Here is an example: - -docs/src/api: - mod_perl-2.0/APR/Table.pod - mod_perl-2.0/Apache/RequestRec.pod - mod_perl-2.0/Apache/compat.pod - Apache-Test/Apache/Test.pod - Apache-Registry/Apache/Registry.pod - Keeping all the docs under the same directory makes it easy to distribute only the documentation, especially simplify the build, since they all live in a separate modperl-docs project. - -So modperl-2.0's API goes into docs/src/api/mod_perl-2.0, -Apache-Test's into docs/src/api/Apache-Test and etc. - -If later on we want to move directories around, this is very easy to -do without losing cvs history. That's said, when you send in new patches, from now on please don't forget to send documentation patches. It's much easier and nicer to - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src config.cfg
stas2003/01/27 01:00:12 Modified:src config.cfg Log: adjustments for the changed hierarchy of api dirs Revision ChangesPath 1.36 +1 -2 modperl-docs/src/config.cfg Index: config.cfg === RCS file: /home/cvs/modperl-docs/src/config.cfg,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- config.cfg15 Jul 2002 05:27:29 - 1.35 +++ config.cfg27 Jan 2003 09:00:11 - 1.36 @@ -90,8 +90,7 @@ # search path for pods, etc. must put more specific paths first! search_paths => [qw( -docs/2.0/api/mod_perl-2.0 -docs/2.0/api/ModPerl-Registry +docs/2.0/api docs/2.0 docs/1.0/api docs/1.0 - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/intro overview.pod start_fast.pod
stas2003/01/26 20:05:13 Modified:src/docs/2.0/api config.cfg src/docs/2.0/user/compat compat.pod src/docs/2.0/user/config custom.pod src/docs/2.0/user/handlers http.pod src/docs/2.0/user/intro overview.pod start_fast.pod Added: src/docs/2.0/api/APR PerlIO.pod Table.pod src/docs/2.0/api/Apache Log.pod Reload.pod RequestRec.pod ServerUtil.pod SubProcess.pod compat.pod src/docs/2.0/api/ModPerl PerlRun.pod Registry.pod RegistryBB.pod RegistryCooker.pod RegistryLoader.pod Removed: src/docs/2.0/api/ModPerl-Registry/ModPerl PerlRun.pod Registry.pod RegistryBB.pod RegistryCooker.pod RegistryLoader.pod src/docs/2.0/api/mod_perl-2.0 .cvsignore Makefile.PL src/docs/2.0/api/mod_perl-2.0/APR PerlIO.pod Table.pod src/docs/2.0/api/mod_perl-2.0/Apache Log.pod Reload.pod RequestRec.pod ServerUtil.pod SubProcess.pod compat.pod Log: drop the extra sub-dirs ModPerl-Registry and mod_perl-2.0, we can control what goes where programmatically if needed. In any case registry is a part of the core Revision ChangesPath 1.12 +13 -13modperl-docs/src/docs/2.0/api/config.cfg Index: config.cfg === RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/config.cfg,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- config.cfg8 Nov 2002 04:10:36 - 1.11 +++ config.cfg27 Jan 2003 04:05:12 - 1.12 @@ -15,27 +15,27 @@ group=> 'Apache::', chapters => [qw( -mod_perl-2.0/Apache/Log.pod -mod_perl-2.0/Apache/Reload.pod -mod_perl-2.0/Apache/RequestRec.pod -mod_perl-2.0/Apache/ServerUtil.pod -mod_perl-2.0/Apache/SubProcess.pod -mod_perl-2.0/Apache/compat.pod +Apache/Log.pod +Apache/Reload.pod +Apache/RequestRec.pod +Apache/ServerUtil.pod +Apache/SubProcess.pod +Apache/compat.pod )], group=> 'APR::', chapters => [qw( -mod_perl-2.0/APR/PerlIO.pod -mod_perl-2.0/APR/Table.pod +APR/PerlIO.pod +APR/Table.pod )], group=> 'ModPerl::', chapters => [qw( -ModPerl-Registry/ModPerl/PerlRun.pod -ModPerl-Registry/ModPerl/Registry.pod -ModPerl-Registry/ModPerl/RegistryBB.pod -ModPerl-Registry/ModPerl/RegistryCooker.pod -ModPerl-Registry/ModPerl/RegistryLoader.pod +ModPerl/PerlRun.pod +ModPerl/Registry.pod +ModPerl/RegistryBB.pod +ModPerl/RegistryCooker.pod +ModPerl/RegistryLoader.pod )], 1.1 modperl-docs/src/docs/2.0/api/APR/PerlIO.pod Index: PerlIO.pod === =head1 NAME APR:PerlIO -- An APR Perl IO layer =head1 SYNOPSIS use APR::PerlIO (); sub handler { my $r = shift; open my $fh, ">:APR", $filename, $r or die $!; # work with $fh as normal $fh close $fh; return Apache::OK; } =head1 DESCRIPTION C implements a Perl IO layer using APR's file manipulation as its internals. Why do you want to use this? Normally you shouldn't, probably it won't be faster than Perl's default layer. It's only useful when you need to manipulate a filehandle opened at the APR side, while using Perl. Normally you won't call open() with APR layer attribute, but some mod_perl functions will return a filehandle which is internally hooked to APR. But you can use APR Perl IO directly if you want. =head1 METHODS Perl Interface: =over =item open() To use APR Perl IO to open a file the four arguments open() should be used. For example: open my $fh, ">:APR", $filename, $r or die $!; where: the second argument is the mode to open the file, constructed from two sections separated by the C<:> character: the first section is the mode to open the file under (E, E, etc) and the second section must be a string I. the fourth argument can be a C or C object. the rest of the arguments are the same as described by the I manpage. =item seek() seek($fh, $offset, $whence); If C<$offset> is zero, C works normally. However if C<$offset> is non-zero and Perl has been compiled with with large files support (C<-Duselargefiles>), whereas APR wasn't, th
cvs commit: modperl-docs/src/docs/2.0/api/Apache - New directory
stas2003/01/26 19:53:57 modperl-docs/src/docs/2.0/api/Apache - New directory - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/api/APR - New directory
stas2003/01/26 19:53:48 modperl-docs/src/docs/2.0/api/APR - New directory - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/api/ModPerl - New directory
stas2003/01/26 19:53:39 modperl-docs/src/docs/2.0/api/ModPerl - New directory - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/general/testing testing.pod
stas2003/01/21 22:59:42 Modified:src/docs/general/testing testing.pod Log: document the new under_construction skip shortcut Revision ChangesPath 1.8 +10 -0 modperl-docs/src/docs/general/testing/testing.pod Index: testing.pod === RCS file: /home/cvs/modperl-docs/src/docs/general/testing/testing.pod,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- testing.pod 22 Jan 2003 06:54:50 - 1.7 +++ testing.pod 22 Jan 2003 06:59:42 - 1.8 @@ -1903,6 +1903,16 @@ plan tests => 2, have_threads; +=item * under_construction() + +this is just a shortcut to skip the test while printing: + + "skipped: this test is under construction"; + +For example: + + plan tests => 2, under_construction; + =item * have_lwp() Tests whether the Perl module LWP is installed. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/general/testing testing.pod
stas2003/01/21 22:54:50 Modified:src/docs/general/testing testing.pod Log: document the new skip test shortcut: have_threads Revision ChangesPath 1.7 +7 -0 modperl-docs/src/docs/general/testing/testing.pod Index: testing.pod === RCS file: /home/cvs/modperl-docs/src/docs/general/testing/testing.pod,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- testing.pod 20 Jan 2003 23:25:03 - 1.6 +++ testing.pod 22 Jan 2003 06:54:50 - 1.7 @@ -1896,6 +1896,13 @@ tests whether C is available. +=item * have_threads() + +have_threads checks whether whether threads are supported by both +Apache and Perl. + + plan tests => 2, have_threads; + =item * have_lwp() Tests whether the Perl module LWP is installed. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/products products.html
stas2003/01/21 14:32:01 Modified:src/products products.html Log: add Loggerithim Revision ChangesPath 1.19 +7 -0 modperl-docs/src/products/products.html Index: products.html === RCS file: /home/cvs/modperl-docs/src/products/products.html,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- products.html 26 Nov 2002 16:35:40 - 1.18 +++ products.html 21 Jan 2003 22:32:01 - 1.19 @@ -180,6 +180,13 @@ +http://loggerithim.sourceforge.net";>Loggerithim is +monitoring package for Linux and Solaris (with early support for OS X +and Win32). It allows you to collect metrics from your hosts and +analyze them with graphs and whatnot. You can also set thresholds for +proactively spotting problems. Modules can be written to supplement +the stock data collection. + http://dnszone.org/";>DnsZone is a fully functional application for Apache/mod_perl. It implements a web based interface for managing zones with a nameserver running BIND. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/general/testing testing.pod
stas2003/01/20 15:25:03 Modified:src/docs/general/testing testing.pod Log: Document the new config feature to bypass auto-conf (NoAutoConfig) Revision ChangesPath 1.6 +25 -0 modperl-docs/src/docs/general/testing/testing.pod Index: testing.pod === RCS file: /home/cvs/modperl-docs/src/docs/general/testing/testing.pod,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- testing.pod 16 Jan 2003 02:43:35 - 1.5 +++ testing.pod 20 Jan 2003 23:25:03 - 1.6 @@ -2413,6 +2413,8 @@ =back +=head3 Forcing Configuration Sections into the Top Level + If some directives are supposed to go to the base configuration, i.e. not to be automatically wrapped into CLocationE> block, you should use a special CBaseE>..C/BaseE> block: @@ -2438,6 +2440,29 @@ configuration and we want to keep the configuration sections in tests to a minimum and let Perl do the rest of the job for us. +=head3 Bypassing Auto-Configuration + +In more complicated cases, usually when virtual hosts containers are +involved, the auto-configuration might stand in a way and you will +simply want to bypass it. If that's the case, put the configuration +inside the CNoAutoConfigE>..C/NoAutoConfigE> +container. For example: + + + + PerlPreConnectionHandler TestPreConnection::note + + + SetHandler modperl + PerlResponseHandler TestPreConnection::note::response + + + + +Notice, that the internal sections will be still parsed, tokens +C<@var@> will be substituted and C sections will be +rewritten with an automatically assigned port number and +C. =head3 Virtual Hosts - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/general/os/win32 faq.pod
stas2003/01/19 16:20:04 Modified:src/docs/general/os/win32 faq.pod Log: an attempt to make the list of other references to be less confusing Revision ChangesPath 1.6 +55 -19modperl-docs/src/docs/general/os/win32/faq.pod Index: faq.pod === RCS file: /home/cvs/modperl-docs/src/docs/general/os/win32/faq.pod,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- faq.pod 19 Jan 2003 23:59:57 - 1.5 +++ faq.pod 20 Jan 2003 00:20:04 - 1.6 @@ -7,13 +7,62 @@ This document discusses some questions that arise often with mod_perl on Win32. +=head1 Resolving Problems + If you don't find a solution to your problem here, make sure to check -the general troubleshooting documents, where non-platform specific -problems are discussed. In particular, see the discussion of -L, -L, and -a L. +the other troubleshooting documents according to the used mod_perl +version as explained in the following sections. + +=head2 Problems with mod_perl 1.0 + +If you have troubles with mod_perl 1.0, please refer to the following +documents: + +=over + +=item * + +L + +=item * + +L + +=item * + +L + +=back + +If the solution is still not found, see the L. + +=head2 Problems with mod_perl 2.0 + +=over + +=item * + +L + +=item * + +L + +=item * + +L + +=item * + +L. + +=back + +If the solution is still not found, see the L. =head1 Obtaining mod_perl @@ -209,19 +258,6 @@ I package available in the ActiveState repository will not work under mod_perl. Note that I has not yet been ported to mod_perl 2.0. - -=head1 See Also - -The discussion of -L, -L, and -a L. -Help is also available through the archives of and subscribing to -the L; you will -probably find the -L -useful reading beforehand. =head1 Maintainers - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/troubleshooting troubleshooting.pod
stas2003/01/19 15:03:45 Modified:src/docs/2.0/user/troubleshooting troubleshooting.pod Log: add a segfault item resolution when DBI is used Revision ChangesPath 1.6 +2 -2 modperl-docs/src/docs/2.0/user/troubleshooting/troubleshooting.pod Index: troubleshooting.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/troubleshooting/troubleshooting.pod,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- troubleshooting.pod 19 Jan 2003 21:26:36 - 1.5 +++ troubleshooting.pod 19 Jan 2003 23:03:45 - 1.6 @@ -21,9 +21,9 @@ =head1 Configuration and Startup +=head2 Segmentation Fault when Using DBI - - +Update DBI to at least version 1.31. =head1 Shutdown and Restart - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/install install.pod
stas2003/01/17 17:35:55 Modified:src/docs/2.0/user/install install.pod Log: fix the link Revision ChangesPath 1.35 +1 -1 modperl-docs/src/docs/2.0/user/install/install.pod Index: install.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/install/install.pod,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- install.pod 18 Jan 2003 01:34:29 - 1.34 +++ install.pod 18 Jan 2003 01:35:55 - 1.35 @@ -163,7 +163,7 @@ % ./Configure -des If you L, run: +support|docs::2.0::user::install::install/Prerequisites>, run: % ./Configure -des -Dusethreads - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/install install.pod
stas2003/01/17 17:34:29 Modified:src/docs/2.0/user/install install.pod Log: mention a problem with threads stability on FreeBSD Revision ChangesPath 1.34 +3 -2 modperl-docs/src/docs/2.0/user/install/install.pod Index: install.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/install/install.pod,v retrieving revision 1.33 retrieving revision 1.34 diff -u -r1.33 -r1.34 --- install.pod 18 Jan 2003 00:47:20 - 1.33 +++ install.pod 18 Jan 2003 01:34:29 - 1.34 @@ -45,8 +45,9 @@ use5005threads='define'; you must rebuild Perl without threads enabled or with -C<-Dusethreads>. Remember that threads support slows things down, so -don't enable it unless you really need it. +C<-Dusethreads>. Remember that threads-support slows things down and +on some platforms it's unstable (e.g., FreeBSD), so don't enable it +unless you really need it. =item threaded MPMs - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/install install.pod
stas2003/01/17 16:47:20 Modified:src/docs/2.0/user/install install.pod Log: clarify the config process of perl (threads vs. non-threads) Revision ChangesPath 1.33 +9 -1 modperl-docs/src/docs/2.0/user/install/install.pod Index: install.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/install/install.pod,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- install.pod 17 Dec 2002 07:22:42 - 1.32 +++ install.pod 18 Jan 2003 00:47:20 - 1.33 @@ -159,13 +159,21 @@ =item Perl % cd perl-5.8.x + % ./Configure -des + +If you L, run: + % ./Configure -des -Dusethreads - % make && make test && make install If you want to debug mod_perl segmentation faults, add the following I<./Configure> options: -Doptimize='-g' -Dusedevel + +Now build it: + + % make && make test && make install =item Apache - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/tmpl/custom/html tail
stas2003/01/16 16:30:57 Modified:tmpl/custom/html tail Log: apparently people want to send comments about our site, give them an address to send these to. Revision ChangesPath 1.22 +3 -0 modperl-docs/tmpl/custom/html/tail Index: tail === RCS file: /home/cvs/modperl-docs/tmpl/custom/html/tail,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- tail 29 Jul 2002 08:19:18 - 1.21 +++ tail 17 Jan 2003 00:30:57 - 1.22 @@ -7,6 +7,9 @@ Last modified [% doc.last_modified %] [%- INCLUDE changes_link -%] +Have comments? Please send them to +the +modperl-docs mailing list. Use of the Camel for Perl is a trademark of http://www.ora.com";>O'Reilly & Associates, and is used by permission. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/general/testing testing.pod
stas2003/01/15 18:43:35 Modified:src/docs/general/testing testing.pod Log: bring the doc in sync with the recent change in the autogenerated code for the client side Revision ChangesPath 1.5 +14 -4 modperl-docs/src/docs/general/testing/testing.pod Index: testing.pod === RCS file: /home/cvs/modperl-docs/src/docs/general/testing/testing.pod,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- testing.pod 13 Dec 2002 10:46:32 - 1.4 +++ testing.pod 16 Jan 2003 02:43:35 - 1.5 @@ -1161,11 +1161,21 @@ won't attempt to change it. Then you can see the trace of the calls that generated this test, in case you want to figure out how the test was generated. And finally the test loads the C -module, imports the C shortcut and prints the response of -the generated request using the C: +module, imports the C shortcut and prints the response's body if +it was successful. Otherwise it dies to flag the problem with the +server side. The latter is done because there is nothing on the client +side, that tells the testing framework that things went wrong. Without +it the test will be skipped, and that's not what we want. - use Apache::TestRequest 'GET_BODY'; - print GET_BODY "/TestApache::write"; + use Apache::TestRequest 'GET'; + my $res = GET "/TestApache::write"; + if ($res->is_success) { + print $res->content; + } + else { + die "server side has failed (response code: ", $res->code, "),\n", + "see t/logs/error_log for more details\n"; + } As you can see the request URI is autogenerated from the response test name: - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/compat compat.pod
stas2003/01/15 17:06:44 Modified:src/docs/2.0/user/compat compat.pod Log: document the issue with Environment Variables Revision ChangesPath 1.40 +11 -0 modperl-docs/src/docs/2.0/user/compat/compat.pod Index: compat.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/compat/compat.pod,v retrieving revision 1.39 retrieving revision 1.40 diff -u -r1.39 -r1.40 --- compat.pod3 Jan 2003 04:33:28 - 1.39 +++ compat.pod16 Jan 2003 01:06:43 - 1.40 @@ -261,7 +261,18 @@ needed. +=head1 Environment Variables +There are several thread-safety issues with setting environment +variables. + +Environment variables set during request time won't be seen by C +code. See the L for possible workarounds. + +Forked processes (including backticks) won't see CGI emulation +environment variables. (META: This will hopefully be resolved in the +future, it's documented in modperl_env.c:modperl_env_magic_set_all.) =head1 C Methods - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/1.0/guide troubleshooting.pod
stas2003/01/15 15:54:03 Modified:src/docs/1.0/guide troubleshooting.pod Log: add a solution for __floatdisf problem. solved by Paul Weiss <[EMAIL PROTECTED]> Revision ChangesPath 1.18 +35 -0 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.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- troubleshooting.pod 4 Dec 2002 02:57:07 - 1.17 +++ troubleshooting.pod 15 Jan 2003 23:54:03 - 1.18 @@ -149,6 +149,41 @@ This can also happen when you try to run a non-mod_perl Apache server using the configuration from a mod_perl server. +=head2 symbol __floatdisf: referenced symbol not found + +This problem is experienced by users on certain Solaris versions. When +the server is built with modules that use the C<__floatdisf> symbol it +can't be started. e.g.: + + Cannot load /usr/local/apache/libexec/libproxy.so into server: + ld.so.1: ../bin/httpd: fatal: relocation error: file + /usr/local/apache/libexec/libproxy.so: symbol __floatdisf: referenced + symbol not found + +The missing symbol is in I. Use + + % gcc -print-libgcc-file-name + +to see where that file is. Once found you have to relink the module +with that file. You can also look for it in the gcc tree, e.g. under +I. + +First, configure and install Apache. Next, relink I or +I, or whatever the module that reports the problem +with I. + + % cd apache_1.3.27/src/modules + % ld -G -o mod_proxy.so mod_proxy.lo /pathto/libgcc.a + +(adjust the I to point to the right file from the gcc output +stage.) + +You can now verify with C that I includes that +symbol. + + + + =head2 RegistryLoader: Translation of uri [...] to filename failed RegistryLoader: Translation of uri [/home/httpd/perl/test.pl] to filename - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/devel/porting porting.pod
stas2003/01/12 20:52:37 Modified:src/docs/2.0/devel/porting porting.pod Log: add a reference to http://httpd.apache.org/docs-2.0/developer/thread_safety.html Revision ChangesPath 1.4 +2 -0 modperl-docs/src/docs/2.0/devel/porting/porting.pod Index: porting.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/porting/porting.pod,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- porting.pod 4 Dec 2002 02:41:53 - 1.3 +++ porting.pod 13 Jan 2003 04:52:37 - 1.4 @@ -125,6 +125,8 @@ /* threads specific code goes here */ #endif +For now see: http://httpd.apache.org/docs-2.0/developer/thread_safety.html + =head1 PerlIO - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/handlers server.pod
stas2003/01/10 21:43:40 Modified:src/docs/2.0/user/handlers server.pod Log: update the logging example to gracefully handle the case when the log file is not open Revision ChangesPath 1.3 +8 -1 modperl-docs/src/docs/2.0/user/handlers/server.pod Index: server.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/handlers/server.pod,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- server.pod17 Nov 2002 05:28:40 - 1.2 +++ server.pod11 Jan 2003 05:43:40 - 1.3 @@ -90,7 +90,14 @@ sub say { my($caller) = (caller(1))[3] =~ /([^:]+)$/; - printf $log_fh "[%s] - %-11s: %s\n", scalar(localtime), $caller, $_[0]; + if (defined $log_fh) { + printf $log_fh "[%s] - %-11s: %s\n", + scalar(localtime), $caller, $_[0]; + } + else { + # when the log file is not open + warn __PACKAGE__ . " says: $_[0]\n"; + } } END { - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/about/contributors companies.pod
stas2003/01/10 21:35:44 Modified:src/about/contributors companies.pod Log: markup fix Revision ChangesPath 1.2 +1 -1 modperl-docs/src/about/contributors/companies.pod Index: companies.pod === RCS file: /home/cvs/modperl-docs/src/about/contributors/companies.pod,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- companies.pod 11 Jan 2003 05:31:04 - 1.1 +++ companies.pod 11 Jan 2003 05:35:44 - 1.2 @@ -8,7 +8,7 @@ developers and/or allowing their employees to work on mod_perl as a part of their day job. -=head Companies +=head1 Companies =over - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/about config.cfg
stas2003/01/10 21:31:04 Modified:src/about config.cfg Added: src/about/contributors companies.pod Log: add the initial doc listing companies supporting mod_perl developers Revision ChangesPath 1.1 modperl-docs/src/about/contributors/companies.pod Index: companies.pod === =head1 NAME Companies sponsoring and supporting mod_perl developers =head1 Description Several companies have contributed to mod_perl by sponsoring mod_perl developers and/or allowing their employees to work on mod_perl as a part of their day job. =head Companies =over =item * Critical Path Critical Path (http://www.cp.net/) has sponsored Doug MacEachern. (XXX: when?) =item * Covalent Technologies Covalent Technologies (http://www.covalent.net/) has sponsored Doug MacEachern. (XXX: when/what?) =item * TicketMaster In 2002 TicketMaster (http://www.ticketmaster.com/) has sponsored Stas Bekman to work on the mod_perl documentation, the new perl.apache.org site and contributing to the mod_perl 2.0 development. =back =head1 Maintainer The maintainer is the person you should contact with updates, corrections and patches. =over =item * Stas Bekman Estas (at) stason.orgE =back =cut 1.9 +1 -0 modperl-docs/src/about/config.cfg Index: config.cfg === RCS file: /home/cvs/modperl-docs/src/about/config.cfg,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- config.cfg15 Oct 2002 05:58:47 - 1.8 +++ config.cfg11 Jan 2003 05:31:04 - 1.9 @@ -12,6 +12,7 @@ group => 'Development', chapters => [qw( contributors/people.html +contributors/companies.pod contributors/other.pod history.pod )], - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/download index_top.html
stas2003/01/10 21:04:20 Modified:src/download index_top.html Log: bump up version Revision ChangesPath 1.10 +1 -1 modperl-docs/src/download/index_top.html Index: index_top.html === RCS file: /home/cvs/modperl-docs/src/download/index_top.html,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- index_top.html16 Oct 2002 13:20:08 - 1.9 +++ index_top.html11 Jan 2003 05:04:19 - 1.10 @@ -14,7 +14,7 @@ -mod_perl 2.0 (in development): Version 1.99_07 - September 25, 2002 +mod_perl 2.0 (in development): Version 1.99_08 - Jan 10, 2003 http://perl.apache.org/dist/mod_perl-2.0-current.tar.gz";>Download | http://perl.apache.org/dist/mod_perl-2.0-current";>Browse | http://perl.apache.org/dist/mod_perl-2.0-current/Changes";>Changes | - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/1.0/api/Apache SizeLimit.pod
stas2003/01/10 18:34:32 Modified:src/docs/1.0/api/Apache SizeLimit.pod Log: use the direct link to the Sharing Memory section Submitted by: Perrin Harkins <[EMAIL PROTECTED]> Revision ChangesPath 1.4 +2 -5 modperl-docs/src/docs/1.0/api/Apache/SizeLimit.pod Index: SizeLimit.pod === RCS file: /home/cvs/modperl-docs/src/docs/1.0/api/Apache/SizeLimit.pod,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- SizeLimit.pod 12 May 2002 05:41:21 - 1.3 +++ SizeLimit.pod 11 Jan 2003 02:34:32 - 1.4 @@ -80,11 +80,8 @@ In addition to simply checking the total size of a process, this module can factor in how much of the memory used by the process is actually being shared by copy-on-write. If you don't understand how -memory is shared in this way, take a look at the L. - - -META: change link when site is live. +memory is shared in this way, take a look at the L section. You can take advantage of the shared memory information by setting a minimum shared size and/or a maximum unshared size. Experience on one - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/handlers http.pod
stas2003/01/09 20:26:57 Modified:src/docs/2.0/user/config config.pod src/docs/2.0/user/handlers http.pod Log: use PerlResponseHandler rather than backcompat PerlHandler Revision ChangesPath 1.32 +1 -1 modperl-docs/src/docs/2.0/user/config/config.pod Index: config.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/config/config.pod,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- config.pod15 Dec 2002 17:32:04 - 1.31 +++ config.pod10 Jan 2003 04:26:57 - 1.32 @@ -533,7 +533,7 @@ PerlSetEnv TEST hi SetHandler perl-script -PerlHandler ModPerl::Registry +PerlResponseHandler ModPerl::Registry Options +ExecCGI 1.10 +4 -4 modperl-docs/src/docs/2.0/user/handlers/http.pod Index: http.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/handlers/http.pod,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- http.pod 5 Dec 2002 07:40:51 - 1.9 +++ http.pod 10 Jan 2003 04:26:57 - 1.10 @@ -310,7 +310,7 @@ Apache::method_register($r->pool, METHOD); $r->handler("perl-script"); - $r->push_handlers(PerlHandler => \&send_email_handler); + $r->push_handlers(PerlResponseHandler => \&send_email_handler); return Apache::OK; } @@ -485,7 +485,7 @@ PerlSetVar ReloadAll Off PerlSetVar ReloadModules "MyApache::*" SetHandler perl-script - PerlHandler ModPerl::Registry + PerlResponseHandler ModPerl::Registry Options +ExecCGI @@ -904,7 +904,7 @@ $r->handler($exts{$ext}->[HANDLER]); if (defined $exts{$ext}->[CALLBACK]) { - $r->set_handlers(PerlHandler => $exts{$ext}->[CALLBACK]); + $r->set_handlers(PerlResponseHandler => $exts{$ext}->[CALLBACK]); } return Apache::OK; @@ -951,7 +951,7 @@ and the callback if needed: if (defined $exts{$ext}->[CALLBACK]) { - $r->set_handlers(PerlHandler => $exts{$ext}->[CALLBACK]); + $r->set_handlers(PerlResponseHandler => $exts{$ext}->[CALLBACK]); } In this simple example the callback functions don't do much but - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/compat compat.pod
stas2003/01/02 20:33:28 Modified:src/docs/2.0/user/compat compat.pod Log: add Apache::PerlRun to the title, for clueless users Revision ChangesPath 1.39 +5 -3 modperl-docs/src/docs/2.0/user/compat/compat.pod Index: compat.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/compat/compat.pod,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- compat.pod28 Dec 2002 07:39:28 - 1.38 +++ compat.pod3 Jan 2003 04:33:28 - 1.39 @@ -154,7 +154,7 @@ directory I<5.8.0/i686-linux-thread-multi> in C<@INC>. -=head1 The C Family +=head1 C, C and Friends C, C and other modules from the registry family now live in the C namespace to avoid @@ -511,12 +511,14 @@ =head2 C<$r-Elog_reason> C<$r-Elog_reason> is not available in mod_perl 2.0 API. Use the -other standard logging functions provided by the C> +other standard logging functions provided by the +C> module. For example: $r->log_error("it works!"); -See the C> manpage. +See the C> +manpage. =head2 C<$r-Eregister_cleanup> - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/outstanding/stats graph.jpg input.data netcraft.html pseudo-graph.jpg securityspace.html
stas2003/01/01 16:49:04 Modified:src/outstanding/stats graph.jpg input.data netcraft.html pseudo-graph.jpg securityspace.html Log: Dec 2002 stats update Revision ChangesPath 1.11 +146 -152 modperl-docs/src/outstanding/stats/graph.jpg <> 1.11 +1 -0 modperl-docs/src/outstanding/stats/input.data Index: input.data === RCS file: /home/cvs/modperl-docs/src/outstanding/stats/input.data,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- input.data1 Dec 2002 15:04:30 - 1.10 +++ input.data2 Jan 2003 00:49:04 - 1.11 @@ -1,4 +1,5 @@ # this file must have the columns \t separated +December 20024082690 461309 November 20023943776 462402 October 2002 3753202 434418 September 2002 3882275 438194 1.11 +1 -0 modperl-docs/src/outstanding/stats/netcraft.html Index: netcraft.html === RCS file: /home/cvs/modperl-docs/src/outstanding/stats/netcraft.html,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- netcraft.html 1 Dec 2002 15:04:30 - 1.10 +++ netcraft.html 2 Jan 2003 00:49:04 - 1.11 @@ -31,6 +31,7 @@ SurveyHostnamesUnique IP Addresses + December 2002 4082690461309 November 2002 3943776462402 October 2002 3753202434418 September 2002 3882275438194 1.11 +45 -55modperl-docs/src/outstanding/stats/pseudo-graph.jpg <> 1.12 +2 -2 modperl-docs/src/outstanding/stats/securityspace.html Index: securityspace.html === RCS file: /home/cvs/modperl-docs/src/outstanding/stats/securityspace.html,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- securityspace.html1 Dec 2002 15:04:30 - 1.11 +++ securityspace.html2 Jan 2003 00:49:04 - 1.12 @@ -7,12 +7,12 @@ SecuritySpace provides an http://www.securityspace.com/s_survey/data/man.200211/apachemods.html?mod=cGVybA==";>Apache +href="http://www.securityspace.com/s_survey/data/man.200212/apachemods.html?mod=cGVybA==";>Apache Module Report on mod_perl comprising statistics and a graph based on the data collected by http://www.securityspace.com/";>www.securityspace.com. They also feature http://www.securityspace.com/s_survey/data/man.200211/apachemods.html";>a +href="http://www.securityspace.com/s_survey/data/man.200212/apachemods.html";>a comparison between all the Apache modules they survey. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src 404.html
stas2002/12/30 20:16:26 Modified:src 404.html Log: suggest using searching to find the info at the broken URL Revision ChangesPath 1.4 +2 -3 modperl-docs/src/404.html Index: 404.html === RCS file: /home/cvs/modperl-docs/src/404.html,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- 404.html 29 Jun 2002 19:19:40 - 1.3 +++ 404.html 31 Dec 2002 04:16:26 - 1.4 @@ -12,9 +12,8 @@ under / --> -The object you were looking for is not at this address anymore. -There's been a little bit of reshuffling in the documentation -hierarchy, therefore please use the main menu to find your way around. +The object you were looking for can't be found at this URL. Please use +the main menu and the search box on your left to find your way around. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/devel/debug/code .debug-modperl-init .debug-modperl-register
stas2002/12/30 20:07:37 Modified:src/docs/2.0/devel/debug c.pod src/docs/2.0/devel/debug/code .debug-modperl-init .debug-modperl-register Log: shared lib is now called mod_perl.so and not libmodperl.so, fix the debug scripts Revision ChangesPath 1.3 +3 -3 modperl-docs/src/docs/2.0/devel/debug/c.pod Index: c.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/debug/c.pod,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- c.pod 10 Dec 2002 02:49:10 - 1.2 +++ c.pod 31 Dec 2002 04:07:37 - 1.3 @@ -84,7 +84,7 @@ b ap_run_pre_config run -d `pwd`/t -f `pwd`/t/conf/httpd.conf \ -DONE_PROCESS -DAPACHE2 -DPERL_USEITHREADS - sharedlibrary modperl + sharedlibrary mod_perl b modperl_hook_init # start: modperl_hook_init continue @@ -145,8 +145,8 @@ Also notice that you don't have to type the full path of the library when trying to load them, even a partial name will suffice. In our -commands file example we have used C instead of -saying C. +commands file example we have used C instead of +saying C. If you want to set breakpoints and step through the code in the Perl and APR core libraries you should load their appropriate libraries: 1.2 +1 -1 modperl-docs/src/docs/2.0/devel/debug/code/.debug-modperl-init Index: .debug-modperl-init === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/debug/code/.debug-modperl-init,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- .debug-modperl-init 9 Dec 2002 16:29:57 - 1.1 +++ .debug-modperl-init 31 Dec 2002 04:07:37 - 1.2 @@ -22,7 +22,7 @@ end define modperl_init -sharedlibrary modperl +sharedlibrary mod_perl b modperl_hook_init continue end 1.2 +1 -1 modperl-docs/src/docs/2.0/devel/debug/code/.debug-modperl-register Index: .debug-modperl-register === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/debug/code/.debug-modperl-register,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- .debug-modperl-register 9 Dec 2002 16:29:57 - 1.1 +++ .debug-modperl-register 31 Dec 2002 04:07:37 - 1.2 @@ -65,7 +65,7 @@ b ap_add_module continue -sharedlibrary modperl +sharedlibrary mod_perl b modperl_register_hooks continue - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/devel/core explained.pod
stas2002/12/29 16:24:47 Modified:src/docs/2.0/devel/core explained.pod Log: what happens when a function args/return types can't be mapped Revision ChangesPath 1.2 +11 -1 modperl-docs/src/docs/2.0/devel/core/explained.pod Index: explained.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/core/explained.pod,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- explained.pod 9 Dec 2002 16:29:57 - 1.1 +++ explained.pod 30 Dec 2002 00:24:47 - 1.2 @@ -302,9 +302,19 @@ % make xs_generate and verify that the autogenerated XS code under the directory -I<./WrapXS> is correct. Otherwise build the project normally: +I<./WrapXS> is correct. Notice that for functions, whose arguments or +return types can't be resolved, the XS glue won't be generated and a +warning will be printed. If that's the case add the missing type's +typemap to the types map file as explained in L and run the XS generation +stage again. + +You can also build the project normally: % perl Makefile.PL ... + +which runs the XS generation stage. =head2 XS generation process - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/api/ModPerl-Registry/ModPerl RegistryCooker.pod RegistryLoader.pod
stas2002/12/29 02:09:10 Modified:src/docs/2.0/api/ModPerl-Registry/ModPerl RegistryCooker.pod RegistryLoader.pod Log: update the registry docs, to sync with the recent code changes Revision ChangesPath 1.5 +13 -0 modperl-docs/src/docs/2.0/api/ModPerl-Registry/ModPerl/RegistryCooker.pod Index: RegistryCooker.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/ModPerl-Registry/ModPerl/RegistryCooker.pod,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- RegistryCooker.pod28 Dec 2002 07:39:28 - 1.4 +++ RegistryCooker.pod29 Dec 2002 10:09:10 - 1.5 @@ -80,6 +80,19 @@ =item * namespace_from() +If C is used and the script is called from the +virtual host, by default the virtual host name is prepended to the uri +when package name for the compiled script is created. Sometimes this +behavior is undesirable, e.g., when the same (physical) script is +accessed using the same path_info but different virtual hosts. In that +case you can make the script compiled only once for all vhosts, by +specifying: + + $ModPerl::RegistryCooker::NameWithVirtualHost = 0; + +The drawback is that it affects the global environment and all other +scripts will be compiled ignoring virtual hosts. + default: namespace_from() =item * is_cached() 1.3 +41 -11 modperl-docs/src/docs/2.0/api/ModPerl-Registry/ModPerl/RegistryLoader.pod Index: RegistryLoader.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/ModPerl-Registry/ModPerl/RegistryLoader.pod,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- RegistryLoader.pod28 Dec 2002 07:39:28 - 1.2 +++ RegistryLoader.pod29 Dec 2002 10:09:10 - 1.3 @@ -2,7 +2,7 @@ ModPerl::RegistryLoader - Compile ModPerl::RegistryCooker scripts at server startup -=head1 SYNOPSIS +=head1 Synopsis # in startup.pl use ModPerl::RegistryLoader (); @@ -14,7 +14,8 @@ ); $rlbb->handler($uri, $filename); - + + ### # uri => filename mapping using a helper function sub trans { my $uri = shift; @@ -26,9 +27,12 @@ trans => \&trans, ); $rl->handler($uri); + + ### + $rlbb->handler($uri, $filename, $virtual_hostname); -=head1 DESCRIPTION +=head1 Description This modules allows compilation of scripts, running under packages derived from C, at server startup. The @@ -37,7 +41,11 @@ the compiled copy with the parent and saving the overhead of script's compilation on the first request in every httpd instance. -=head1 METHODS +This module is of course useless for those running the +C> handler, because the scripts get recompiled on +each request under this handler. + +=head1 Methods =over @@ -76,10 +84,10 @@ =item handler() - $rl->handler($uri, [$filename]); + $rl->handler($uri, [$filename, [$virtual_hostname]]); The handler() method takes argument of C and optionally of -C. +C and of C. URI to filename translation normally doesn't happen until HTTP request time, so we're forced to roll our own translation. If the filename is @@ -143,16 +151,38 @@ } } +If C<$virtual_hostname> argument is passed it'll be used in the +creation of the package name the script will be compiled into for +those registry handlers that use I method. See +also the notes on C<$ModPerl::RegistryCooker::NameWithVirtualHost> in +the C> documentation. + +Also +explained in the C> documentation, this +only has an effect at run time if +C<$ModPerl::RegistryCooker::NameWithVirtualHost> is set to true, +otherwise the C<$virtual_hostname> argument is ignored. + =back -=head1 AUTHORS +=head1 Implementation Notes -Doug MacEachern +C performs a very simple job, at run time it +loads and sub-classes the module passed via the I attribute +and overrides some of its functions, to emulate the run-time +environment. This allows to preload the same script into different +registry environments. -Stas Bekman +=head1 Authors -=head1 SEE ALSO +The original C implemented by Doug MacEachern. -ModPerl::RegistryCooker(3), Apache(3), mod_perl(3) +Stas Bekman did the porting to the new registry framework based on +C. + +=head1 SEE ALSO +C>, C>, +C>, C>, Apache(3), +mod_perl(3) - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/compat compat.pod
stas2002/12/27 23:39:28 Modified:src/docs/2.0/api/ModPerl-Registry/ModPerl RegistryCooker.pod RegistryLoader.pod src/docs/2.0/user/compat compat.pod Log: more registry docs Revision ChangesPath 1.4 +34 -4 modperl-docs/src/docs/2.0/api/ModPerl-Registry/ModPerl/RegistryCooker.pod Index: RegistryCooker.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/ModPerl-Registry/ModPerl/RegistryCooker.pod,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- RegistryCooker.pod27 Dec 2002 07:05:22 - 1.3 +++ RegistryCooker.pod28 Dec 2002 07:39:28 - 1.4 @@ -33,14 +33,28 @@ Here are the current overridable methods: +META: these are all documented in RegistryCooker.pm, though not using +pod. please help to port these to pod and move the descriptions here. + =over =item * new() +create the class's object, bless it and return it + + my $obj = $class->new($r); + +C<$class> -- the registry class, usually C<__PACKAGE__> can be used. + +C<$r> -- C> object. + default: new() =item * init() +initializes the data object's fields: C, C, +C. Called from the new(). + default: init() =item * default_handler() @@ -128,16 +142,32 @@ =back -Special Predefined functions + + + +=head2 Special Predefined Functions + +The following functions are implemented as constants. =over =item * NOP() -META: compelete +Use when the function shouldn't do anything. + +=item * TRUE() + +Use when a function should always return a true value. + +=item * FALSE() + +Use when a function should always return a false value. =back + + + =head1 Sub-classing Techniques To override the default C methods, first, @@ -199,8 +229,8 @@ return (stat $self->[FILENAME])[1]; } -META: when $r->finfo will be ported it'll be more effecient. (stat -$r->finfo)[1] +META: when $r-Efinfo will be ported it'll be more effecient. +(stat $r-Efinfo)[1] =head1 Authors 1.2 +5 -1 modperl-docs/src/docs/2.0/api/ModPerl-Registry/ModPerl/RegistryLoader.pod Index: RegistryLoader.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/ModPerl-Registry/ModPerl/RegistryLoader.pod,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- RegistryLoader.pod13 Nov 2001 04:36:21 - 1.1 +++ RegistryLoader.pod28 Dec 2002 07:39:28 - 1.2 @@ -46,11 +46,15 @@ When creating a new C object, one has to specify which of the C derived modules to use. For example if a script is going to run under -C the object is initialized as: +C the object is initialized as: my $rlbb = ModPerl::RegistryLoader->new( package => 'ModPerl::RegistryBB', ); + +If the package is not specified C is assumed: + + my $rlbb = ModPerl::RegistryLoader->new(); To turn the debugging on, set the I attribute to a true value: 1.38 +11 -0 modperl-docs/src/docs/2.0/user/compat/compat.pod Index: compat.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/compat/compat.pod,v retrieving revision 1.37 retrieving revision 1.38 diff -u -r1.37 -r1.38 --- compat.pod15 Dec 2002 15:27:51 - 1.37 +++ compat.pod28 Dec 2002 07:39:28 - 1.38 @@ -183,7 +183,18 @@ META: complete +META: document that for now ModPerl::Registry doesn't chdir() into the +script's dir like Apache::Registry does, because chdir() affects the +whole process under threads. + +=head2 C + +In mod_perl 1.0 it was only possible to preload scripts as +C handlers. In 2.0 the loader can use any of the +registry classes to preload into. The old API works as before, but new +options can be passed. See the I> manpage +for more information. =head1 C - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/api/ModPerl-Registry/ModPerl Registry.pod RegistryBB.pod RegistryCooker.pod
stas2002/12/26 23:05:22 Modified:src/docs/2.0/api/ModPerl-Registry/ModPerl Registry.pod RegistryBB.pod RegistryCooker.pod Log: registry docs, work in progress Revision ChangesPath 1.3 +5 -1 modperl-docs/src/docs/2.0/api/ModPerl-Registry/ModPerl/Registry.pod Index: Registry.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/ModPerl-Registry/ModPerl/Registry.pod,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Registry.pod 19 May 2002 09:41:39 - 1.2 +++ Registry.pod 27 Dec 2002 07:05:21 - 1.3 @@ -11,7 +11,7 @@ SetHandler perl-script PerlResponseHandler ModPerl::Registry #PerlOptions +ParseHeaders - #PerlOptions +GlobalRequest + #PerlOptions -GlobalRequest Options +ExecCGI @@ -35,6 +35,10 @@ $r->print("mod_perl rules!"); XXX: STOPPED here + +META: document that for now we don't chdir() into the script's dir, +because it affects the whole process under threads. + This module emulates the CGI environment, allowing programmers to write scripts that run under CGI or mod_perl without change. Existing 1.3 +1 -1 modperl-docs/src/docs/2.0/api/ModPerl-Registry/ModPerl/RegistryBB.pod Index: RegistryBB.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/ModPerl-Registry/ModPerl/RegistryBB.pod,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- RegistryBB.pod19 May 2002 09:41:39 - 1.2 +++ RegistryBB.pod27 Dec 2002 07:05:22 - 1.3 @@ -11,7 +11,7 @@ SetHandler perl-script PerlResponseHandler ModPerl::RegistryBB #PerlOptions +ParseHeaders - #PerlOptions +GlobalRequest + #PerlOptions -GlobalRequest Options +ExecCGI 1.3 +197 -0 modperl-docs/src/docs/2.0/api/ModPerl-Registry/ModPerl/RegistryCooker.pod Index: RegistryCooker.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/ModPerl-Registry/ModPerl/RegistryCooker.pod,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- RegistryCooker.pod19 May 2002 09:41:39 - 1.2 +++ RegistryCooker.pod27 Dec 2002 07:05:22 - 1.3 @@ -4,7 +4,204 @@ =head1 Synopsis + # shouldn't be used as-is but sub-classed first + # see ModPerl::Registry for an example + =head1 Description + +C is used to create flexible and overridable +registry modules which emulate mod_cgi for Perl scripts. The concepts +are discussed in the manpage of the following modules: +C>, C> and +C>. + +C has two purposes: + +=over + +=item * + +Provide ingredients that can be used by registry sub-classes + +=item * + +Provide a default behavior, which can be overriden in sub-classed + +META: in the future this functionality may move into a separate class. + +=back + +Here are the current overridable methods: + +=over + +=item * new() + +default: new() + +=item * init() + +default: init() + +=item * default_handler() + +default: default_handler() + +=item * run() + +default: run() + +=item * can_compile() + +default: can_compile() + +=item * make_namespace() + +default: make_namespace() + +=item * namespace_root() + +default: namespace_root() + + +=item * namespace_from() + +default: namespace_from() + +=item * is_cached() + +default: is_cached() + +=item * should_compile() + +default: should_compile() + +=item * flush_namespace() + +default: flush_namespace() + + +=item * cache_table() + +default: cache_table() + +=item * cache_it() + +default: cache_it() + +=item * read_script() + +default: read_script() + +=item * rewrite_shebang() + +default: rewrite_shebang() + +=item * set_script_name() + +default: set_script_name() + +=item * chdir_file() + +default: chdir_file() + +=item * get_mark_line() + +default: get_mark_line() + +=item * compile() + +default: compile() + + +=item * error_check() + +default: error_check() + +=item * strip_end_data_segment() + +default: strip_end_data_segment() + +=item * convert_script_to_compiled_handler() + +default: convert_script_to_compiled_handler() + +=back + +Special Predefined functions + +=over + +=item * NOP() + +META: compelete + +=back + +=head1 Sub-classing Techniques + +To override the default C methods, first, +sub-class C or one of its existing +sub-classes, using C. Second, overr
cvs commit: modperl-docs/src/docs/2.0/user/intro overview.pod
stas2002/12/23 15:31:22 Modified:src/docs/2.0/user/design design.pod src/docs/2.0/user/intro overview.pod Log: trying to bring the design doc up-to-date Revision ChangesPath 1.11 +54 -76modperl-docs/src/docs/2.0/user/design/design.pod Index: design.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/design/design.pod,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- design.pod15 Dec 2002 17:36:38 - 1.10 +++ design.pod23 Dec 2002 23:31:22 - 1.11 @@ -4,7 +4,12 @@ =head1 Description -Notes on the design and goals of mod_perl-2.0 +Notes on the design and goals of mod_perl-2.0. + +We try to keep this doc in sync with the development, so some items +discussed here were already implemented, while others are only +planned. If you find some inconsistencies in this document please let +the list know. =head1 Introduction @@ -395,52 +400,32 @@ =head1 Filter Hooks -mod_perl will provide two interfaces to filtering, a direct mapping to -buckets and bucket brigades and a simpler, stream-oriented interface. - -Example of the stream oriented interface: - - file:httpd.conf - --- - PerlOutputFilterHandler Apache::ReverseFilter - - file:Apache/ReverseFilter.pm - - package Apache::ReverseFilter; - - use strict; - - sub handler { - my $filter = shift; - - while ($filter->read(my $buffer, 1024)) { - $filter->write(scalar reverse $buffer); - } - - return Apache::OK; - } - 1; +mod_perl 2.0 provides two interfaces to filtering, a direct mapping to +buckets and bucket brigades and a simpler, stream-oriented +interface. This is discussed in the L. =head1 Directive Handlers mod_perl 1.0 provides a mechanism for Perl modules to implement -first-class directive handlers, but requires an xs file to be -generated and compiled. The 2.0 version will provide the same -functionality, but will not require the generated xs module. +first-class directive handlers, but requires an XS file to be +generated and compiled. The 2.0 version provides the same +functionality, but does not require the generated XS module +(i.e. everything is implemented in pure Perl). =head1 EPerlE Configuration Sections -The ability to write configuration in Perl will carry over from 1.0, -but will likely be implemented much different internally. The mapping -of a Perl symbol table should fit cleanly into the new -I API, unlike the hoop jumping required in 1.0. +The ability to write configuration in Perl carries over from 1.0, but +but implemented much different internally. The mapping of a Perl +symbol table fits cleanly into the new I API, unlike +the hoop jumping required in mod_perl 1.0. =head1 Protocol Module Support -Protocol module support is provided out-of-the-box, as the hooks -and API are covered by the generated code blankets. Any functionality -for assisting protocol modules should be folded back into Apache if -possible. +L support is +provided out-of-the-box, as the hooks and API are covered by the +generated code blankets. Any functionality for assisting protocol +modules should be folded back into Apache if possible. =head1 mod_perl MPM @@ -472,18 +457,19 @@ unpacked inside the mod_perl tree and built static without modification to the mod_perl Makefiles. -For platforms such as Win32, the build files will be generated similar -to how unix-flavor Is are. +For platforms such as Win32, the build files are generated similar to +how unix-flavor Is are. =head1 Test Framework -Similar to 1.0, mod_perl-2.0 will provide a 'make test' target to -exercise as many areas of the API and module features as possible. +Similar to 1.0, mod_perl-2.0 provides a 'make test' target to exercise +as many areas of the API and module features as possible. The test framework in 1.0, like several other areas of mod_perl, was -cobbled together over the years. The goal of 2.0 is to provide a test -framework that will be usable not only for mod_perl, but for -third-party C modules and Apache itself. +cobbled together over the years. mod_perl 2.0 provides a test +framework that is usable not only for mod_perl, but for third-party +C modules and Apache itself. See +C>. =head1 CGI Emulation @@ -494,31 +480,35 @@ For example, the C<%ENV> environment variable table, C blocks, C<@INC> include paths, etc. -CGI emulation will be supported in 2.0, but done so in a way that it -is encapsulated in its own handler. Rather that 1.0 which uses the +CGI emulation is suppor
cvs commit: modperl-docs/src/docs/1.0/guide snippets.pod
stas2002/12/20 18:04:35 Modified:src/docs/1.0/guide snippets.pod Log: a corrected version of the backup script Submitted by: Miroslav Madzarevic, [EMAIL PROTECTED] Reviewed by: stas Revision ChangesPath 1.14 +12 -6 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.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- snippets.pod 20 Dec 2002 06:13:29 - 1.13 +++ snippets.pod 21 Dec 2002 02:04:35 - 1.14 @@ -1492,22 +1492,28 @@ Here is another version using C: - #!/usr/bin/perl -w + #!/usr/bin/perl + # written by Miroslav Madzarevic, [EMAIL PROTECTED] use strict; + umask 0177; + use File::Backup qw|backup|; backup( - 'from' => "/home/mire/www", - 'to'=> "/opt/backup/box/some_dir", + 'from' => "", + 'to'=> "/opt/backup/mysql/backup", 'torootname'=> "example_backup_", 'keep' => 4, - 'tar' => "/bin/tar", + 'tar' => "/usr/bin/mysqldump", 'compress' => "/usr/bin/bzip2", - 'tarflags' => "cvf", + 'tarflags' => "example -uroot -proot_pass -a >", 'compressflags' => "", - 'tarsuffix' => '.tar', + 'tarsuffix' => '.sql', ); + + + Now make the script executable and arrange the crontab entry to run the backup script nightly. Note that the disk space used by the - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/1.0/guide snippets.pod Changes.pod
stas2002/12/19 22:13:29 Modified:src/docs/1.0/guide snippets.pod Changes.pod Log: Added a short version of the mysql back script Submitted by: "mire" <[EMAIL PROTECTED]> Reviewed by: stas Revision ChangesPath 1.13 +19 -0 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.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- snippets.pod 8 Nov 2002 06:34:47 - 1.12 +++ snippets.pod 20 Dec 2002 06:13:29 - 1.13 @@ -1490,6 +1490,25 @@ system. List the names of the databases you want to backup using the C array. +Here is another version using C: + + #!/usr/bin/perl -w + use strict; + + use File::Backup qw|backup|; + + backup( + 'from' => "/home/mire/www", + 'to'=> "/opt/backup/box/some_dir", + 'torootname'=> "example_backup_", + 'keep' => 4, + 'tar' => "/bin/tar", + 'compress' => "/usr/bin/bzip2", + 'tarflags' => "cvf", + 'compressflags' => "", + 'tarsuffix' => '.tar', + ); + Now make the script executable and arrange the crontab entry to run the backup script nightly. Note that the disk space used by the backups will grow without bound and you should remove the old backups. 1.36 +3 -0 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.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- Changes.pod 8 Nov 2002 06:34:47 - 1.35 +++ Changes.pod 20 Dec 2002 06:13:29 - 1.36 @@ -26,6 +26,9 @@ o Added some Apache::Cookie login page example with internal redirects. [Alan Bailward, ] + o Added a short version of the mysql back script ["mire" + <[EMAIL PROTECTED]>] + * performance.pod o Note about browser not rendering immediately even under $|=1. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/install install.pod
stas2002/12/16 23:22:42 Modified:src/docs/2.0/user/install install.pod Log: explain why 5.6.1 is not enforced, even though we know that 5.6.0 is buggy. Revision ChangesPath 1.32 +4 -1 modperl-docs/src/docs/2.0/user/install/install.pod Index: install.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/install/install.pod,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- install.pod 27 Oct 2002 09:24:47 - 1.31 +++ install.pod 17 Dec 2002 07:22:42 - 1.32 @@ -33,7 +33,10 @@ =item prefork MPM Requires at least Perl version 5.6.0. But we strongly suggest to use -at least version 5.6.1, since 5.6.0 is quite buggy. +at least version 5.6.1, since 5.6.0 is quite buggy. The only reason we +support 5.6.0 is for development reasons (so the build can be tested +on systems having only 5.6.0) and those users who want to give it a +try, without first having the hassle of updating their perl version. You don't need to have threads-support enabled in Perl. If you do have it, it B be I and not I<5005threads>! If you have: - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/overview overview.pod
stas2002/12/15 09:36:38 Modified:src/docs/1.0/os/win32 multithread.pod src/docs/2.0/user config.cfg src/docs/2.0/user/design design.pod Added: src/docs/2.0/user/intro overview.pod Removed: src/docs/2.0/user/overview overview.pod Log: move the overview chapter into the intro section, adjust links Revision ChangesPath 1.3 +1 -1 modperl-docs/src/docs/1.0/os/win32/multithread.pod Index: multithread.pod === RCS file: /home/cvs/modperl-docs/src/docs/1.0/os/win32/multithread.pod,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- multithread.pod 30 May 2002 19:37:50 - 1.2 +++ multithread.pod 15 Dec 2002 17:36:38 - 1.3 @@ -21,7 +21,7 @@ This situation changes with Apache/mod_perl 2.0, which is based on a multi-process/multi-thread approach using a native Win32 threads implementation See the L for more details, +overview|docs::2.0::user::intro::overview> for more details, and the discussion of L on getting modperl-2 for Win32 in particular. 1.19 +1 -1 modperl-docs/src/docs/2.0/user/config.cfg Index: config.cfg === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/config.cfg,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- config.cfg15 Dec 2002 17:32:04 - 1.18 +++ config.cfg15 Dec 2002 17:36:38 - 1.19 @@ -11,7 +11,7 @@ group=> 'Introduction', chapters => [qw( intro/start_fast.pod -overview/overview.pod +intro/overview.pod design/design.pod )], 1.10 +1 -1 modperl-docs/src/docs/2.0/user/design/design.pod Index: design.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/design/design.pod,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- design.pod16 Jun 2002 12:43:38 - 1.9 +++ design.pod15 Dec 2002 17:36:38 - 1.10 @@ -17,7 +17,7 @@ being implemented as a complete re-write from scratch. For a more detailed introduction and functionality overview, see -L. +L. =head1 Interpreter Management 1.1 modperl-docs/src/docs/2.0/user/intro/overview.pod Index: overview.pod === =head1 NAME Overview of mod_perl 2.0 =head1 Description This chapter presents the new features of Apache 2.0, Perl 5.6.0 - 5.8.0 and their influence on mod_perl 2.0. The new MPM models from Apache 2.0 are discussed. This chapter should give you a general idea about what mod_perl 2.0 is and how it differs from mod_perl 1.0. =head1 Version Naming Conventions In order to keep things simple, here and in the rest of the documentation we refer to mod_perl 1.x series as mod_perl 1.0 and to 2.0.x series as mod_perl 2.0. Similarly we call Apache 1.3.x series as Apache 1.3 and 2.0.x as Apache 2.0. There is also Apache 2.1, which is a development track towards Apache 2.2. =head1 Why mod_perl, The Next Generation mod_perl was introduced in early 1996, both Perl and Apache have changed a great deal since that time. mod_perl has adjusted to both along the way over the past 4 and a half years or so using the same code base. Over this course of time, the mod_perl sources have become more and more difficult to maintain, in large part to provide compatibility between the many different flavors of Apache and Perl. And, compatibility across these versions and flavors is a more difficult goal for mod_perl to reach that a typical Apache or Perl module, since mod_perl reaches a bit deeper into the corners of Apache and Perl internals than most. Discussions of the idea to rewrite mod_perl as version 2.0 started in 1998, but never made it much further than an idea. When Apache 2.0 development was underway it became clear that a rewrite of mod_perl would be required to adjust to the new Apache architecture and API. Of the many changes happening in Apache 2.0, the one which has the most significant impact on mod_perl is the introduction of threads to the overall design. Threads have been a part of Apache on the win32 side since the Apache port was introduced. The mod_perl port to win32 happened in version 1.00b1, released in June of 1997. This port enabled mod_perl to compile and run in a threaded windows environment, with one major caveat: only one concurrent mod_perl request could be handled at any given time. This was due to the fact that Perl did not introduce thread-safe interpreters until vers
cvs commit: modperl-docs/src/docs/2.0/user/intro start_fast.pod
stas2002/12/15 09:32:04 Modified:src/docs/2.0 TODO src/docs/2.0/devel/core apache_integration.pod src/docs/2.0/user config.cfg src/docs/2.0/user/coding coding.pod src/docs/2.0/user/config config.pod src/docs/2.0/user/intro start_fast.pod Log: a bunch of docco fixes and improvements Revision ChangesPath 1.4 +231 -1modperl-docs/src/docs/2.0/TODO Index: TODO === RCS file: /home/cvs/modperl-docs/src/docs/2.0/TODO,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- TODO 4 Dec 2002 02:58:26 - 1.3 +++ TODO 15 Dec 2002 17:32:04 - 1.4 @@ -52,9 +52,239 @@ If you create an apr object and register your own cleanup, you still have that object until your registered cleanup is finished. +--- + +Need to integrate the following example, removed from overview.pod, in +protocols.pod: + + +=head2 Apache::CommandServer + +Our first protocol handler example took advange of Apache's server +framework, but did not tap into any other modules. The next example +is based on the example in the "TCP Servers with IO::Socket" section +of the I manpage. Of course, we don't need C +since Apache takes care of those details for us. The rest of that +example can still be used to illustrate implementing a simple text +protocol. In this case, one where a command is sent by the client to +be executed on the server side, with results sent back to the client. + +The C handler will support four commands: +C, C, C and C. These are probably not commands +which can be exploited, but should we add such commands, we'll want to +limit access based on ip address/hostname, authentication and +authorization. Protocol handlers need to take care of these tasks +themselves, since we bypass the HTTP protocol handler. + +As with all C, we are passed an +C object as the first argument. Again, we will be +directly accessing the client socket via the I method. +The I subroutine is called to check if access by this client +should be allowed. This routine makes up for what we lost with the +core HTTP protocol handler bypassed. First we call the +C I method, which returns a I +object, just like that which is passed at request time to +C and returned by the subrequest API methods, +I and I. However, this "fake request" does +not run handlers for any of the phases, it simply returns an object +which we can use to do that ourselves. The C method +is passed the "location" for this request, it will look up the +CLocationE> section that matches the given name and merge it +with the default server configuration. For example, should we only +wish to allow access to this server from certain locations: + + + deny from all + allow from 10.* + + +The I method only looks up and merges the +configuration, we still need to apply it. This is done in I +loop, iterating over three methods: I, +I and I. These methods will call +directly into the Apache functions that invoke module handlers for +these phases and will return an integer status code, such as C, +C or C. If I returns something +other than C or C, that status will be propagated up to +the handler routine and then back up to Apache. Otherwise, the access +check passed and the loop will break unless I +returns true. This would be false given the previous configuration +example, but would be true in the presense of a I directive, +such as: + + + deny from all + allow from 10.* + require user dougm + + +Given this configuration, I will return true. The +I method is then called, which will return false if we have not +yet authenticated. A I utility is called to read the username +and password, which are then injected into the I table +using the I method. The I field +in this table is set to a base64 encoded value of the +username:password pair, exactly the same format a browser would send +for I. Next time through the loop +I is called, which will in turn invoke any +authentication handlers, such as I. When I calls +the I API function (as all Basic auth modules +do), it will get back the username and password we injected. If we +fail authentication a B<401> status code is returned which we +propagate up. Otherwise, authorization handlers are run via +I. Authorization handlers normally need the I +field of the I for its checks and that field was filled +in when I called I. + +Provided login is a success, a welcome message is printed and main +request loop entered. Inside the loop the I function returns +just one line of data, with newline characters stripped. If the +string sent by t
cvs commit: modperl-docs/src/docs/2.0/user/overview overview.pod
stas2002/12/15 09:31:19 Modified:src/docs/2.0/user/overview overview.pod Removed: src/docs/2.0/user/intro what_is_new.pod Log: - folding what_is_new.pod into overview.pod - cleaning up old wannabe overview notes Revision ChangesPath 1.12 +465 -937 modperl-docs/src/docs/2.0/user/overview/overview.pod Index: overview.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/overview/overview.pod,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- overview.pod 9 Oct 2002 08:46:05 - 1.11 +++ overview.pod 15 Dec 2002 17:31:18 - 1.12 @@ -4,11 +4,22 @@ =head1 Description -This chapter gives you a general idea about what mod_perl 2.0 is and -how it differs from mod_perl 1.0. Also the new MPM models from Apache -2.0 are discussed +This chapter presents the new features of Apache 2.0, Perl 5.6.0 - +5.8.0 and their influence on mod_perl 2.0. The new MPM models from Apache +2.0 are discussed. This chapter should give you a general idea about +what mod_perl 2.0 is and how it differs from mod_perl 1.0. -=head1 Introduction + + +=head1 Version Naming Conventions + +In order to keep things simple, here and in the rest of the +documentation we refer to mod_perl 1.x series as mod_perl 1.0 and to +2.0.x series as mod_perl 2.0. Similarly we call Apache 1.3.x series as +Apache 1.3 and 2.0.x as Apache 2.0. There is also Apache 2.1, which is +a development track towards Apache 2.2. + +=head1 Why mod_perl, The Next Generation mod_perl was introduced in early 1996, both Perl and Apache have changed a great deal since that time. mod_perl has adjusted to both @@ -44,65 +55,111 @@ It just so happens that the release of Perl 5.6.0 was nearly at the same time as the first alpha version of Apache 2.0. The development of mod_perl 2.0 was underway before those releases, but as both Perl -5.6.x and Apache 2.0 are reaching stability, mod_perl-2.0 becomes more -of a reality. In addition to the adjustments for threads and Apache -2.0 API changes, this rewrite of mod_perl is an opportunity to clean -up the source tree. This includes both removing the old backward -compatibility bandaids and building a smarter, stronger and faster -implementation based on lessons learned over the 4.5 years since -mod_perl was introduced. +5.6.0 and Apache 2.0 were reaching stability, mod_perl 2.0 was +becoming more of a reality. In addition to the adjustments for +threads and Apache 2.0 API changes, this rewrite of mod_perl is an +opportunity to clean up the source tree. This includes both removing +the old backward compatibility bandaids and building a smarter, +stronger and faster implementation based on lessons learned over the +4.5 years since mod_perl was introduced. + +The new version includes a mechanism for an automatic building of the +Perl interface to Apache API, which allowed us to easily adjust +mod_perl 2.0 to ever changing Apache 2.0 API, during its development +period. Another important feature is the +C> framework, which +was originally developed for mod_perl 2.0, but then was adopted by +Apache 2.0 developers to test the core server features and third party +modules. Moreover the tests written using the +C> framework could be +run with Apache 1.0 and 2.0, assuming that both supported the same +features. + +There are multiple other interesting changes that have already +happened to mod_perl in version 2.0 and more will be developed in the +future. Some of these are discussed in this chapter, others can be +found in the rest of the mod_perl 2.0 documentation. + +=head1 What's new in Apache 2.0 + +Apache 2.0 has introduced numerous new features and enhancements. Here +are the most important new features: + +=over -This document assumes basic knowlege of mod_perl-1.0 features and will -focus only the differences mod_perl-2.0 will bring. +=item * I (APR) -Note 1: The Apache and mod_perl APIs mentioned in this document are -both in an "alpha" state and subject to change. +Apache 1.3 has been ported to a very large number of platforms +including various flavors of unix, win32, os/2, the list goes on. +However, in 1.3 there was no clear-cut, pre-designed portability layer +for third-party modules to take advantage of. APR provides this API +layer in a very clean way. APR assists a great deal with mod_perl +portability. Combined with the portablity of Perl, mod_perl 2.0 needs +only to implement a portable build system, the rest comes "for free". +A Perl interface is provided for certain areas of APR, such as the +shared memory abstraction, but the majority of APR is used by mod_perl +"under the covers". -Note 2: Some of the mo
cvs commit: modperl-docs/src/docs/2.0/user/compat compat.pod
stas2002/12/15 07:27:51 Modified:src/docs/2.0/user/compat compat.pod Log: document the back compat issues with $r->set_byterange and $r->each_byterange Revision ChangesPath 1.37 +15 -0 modperl-docs/src/docs/2.0/user/compat/compat.pod Index: compat.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/compat/compat.pod,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- compat.pod6 Dec 2002 16:24:32 - 1.36 +++ compat.pod15 Dec 2002 15:27:51 - 1.37 @@ -575,8 +575,23 @@ C<$r-Esoft_timeout> and C<$r-Ekill_timeout> aren't needed in mod_perl 2.0. +=head2 C<$r-Eset_byterange> +See the next item. +=head2 C<$r-Eeach_byterange> + +The functions C<$r-Eset_byterange> and C<$r-Eeach_byterange> +aren't in the Apache 2.0 API, and therefore don't exist in mod_perl +2.0. The byterange serving functionality is now implemented in the +ap_byterange_filter, which is a part of the core http module, meaning +that it's automatically taking care of serving the requested ranges +off the normal complete response. There is no need to configure +it. It's executed only if the appropriate request headers are +set. These headers aren't listed here, since there are several +combinations of them, including the older ones which are still +supported. For a complete info on these see +I. =head1 Apache::File - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/config custom.pod
stas2002/12/13 09:50:29 Modified:src/docs/2.0/user/config custom.pod Log: the custom configuration directives doc is almost complete Revision ChangesPath 1.3 +310 -117 modperl-docs/src/docs/2.0/user/config/custom.pod Index: custom.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/config/custom.pod,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- custom.pod12 Dec 2002 10:17:27 - 1.2 +++ custom.pod13 Dec 2002 17:50:29 - 1.3 @@ -7,8 +7,6 @@ This chapter explains how to create custom Apache configuration directives in Perl. -WARNING: This doc is under construction - =head1 Incentives mod_perl provides several ways to pass custom configuration @@ -167,16 +165,17 @@ the defaults described next. These are the attributes that can be used to define the directives -behavior: +behavior: I>, I>, +I>, I> and +I>. They are discussed in the following sections. -=over -=item * name +=head3 C This is the only required attribute. And it declares the name of the new directive as it'll be used in I. -=item * func +=head3 C The I attribute expects a reference to a function or a function name. This function is called by httpd every time it encounters the @@ -198,13 +197,14 @@ as a name of a subroutine and it anticipates that it exists in that package. -=item * req_override +=head3 C The I<> attribute defines the valid scope in which this directive can appear. There are L which map onto the corresponding Apache macros. These constants should be imported from -the C package. +the C> +package. For example, to use the C constant, which allows directives to be defined anywhere, first, it needs to be imported: @@ -224,31 +224,33 @@ forbid it from ever being used in I<.htaccess> files: This attribute is optional. If not supplied, the default value of -C is used. +C> is used. -=item * args_how +=head3 C Directives can receive zero, one or many arguments. In order to help Apache validate that the number of arguments is valid, the I attribute should be set to the desired value. Similar to the -I attribute, the C package provides -special constants which map to the corresponding Apache macros. There -are L to -choose from. +I> attribute, the +C> +package provides special constants which map to the corresponding +Apache macros. There are L to choose from. In our example, the directive C accepts one or more -arguments, therefore we have the C constant: +arguments, therefore we have the +C> constant: args_how => Apache::ITERATE, This attribute is optional. If not supplied, the default value of -C is used. +C> is used. META: the default may change to use a constant corresponding to the I prototype. -=item * errmsg +=head3 C The I attribute provides a short but succinct usage statement that summarizes the arguments that the directive takes. It's used by @@ -261,23 +263,22 @@ errmsg => 'MyParameter Entry1 [Entry2 ... [EntryN]]', This attribute is optional. If not supplied, the default value of will -be a string based on the directive's I and I -attributes. +be a string based on the directive's I> and +I> attributes. -=back =head2 Directive Scope Definition Constants -The I attribute specifies the configuration scope in -which it's valid to use a given configuration directive. This -attribute's value can be any of or a combination of the following -constants: +The I> attribute specifies the +configuration scope in which it's valid to use a given configuration +directive. This attribute's value can be any of or a combination of +the following constants: (these constants are declared in I.) =head3 C -The directive cannot be overriden by any of the C +The directive cannot be overridden by any of the C options. =head3 C @@ -331,7 +332,14 @@ Force directive to execute a command which would modify the configuration (like including another file, or C). -META: details??? +Normally, Apache first parses the configuration tree and then executes +the directives it has encountered (e.g., C). But there are +directives that must be executed during the initial parsing, either +because they affect the configuration tree (e.g., C may load +extra configuration) or because they tell Apache about new directives +(e.g., C or C, may load a module, which +installs handlers for new directives). These directives must have the +C turned on. =head3 C @@ -342,11 +350,12 @@ =head2 Direct
cvs commit: modperl-docs/src/docs/general/testing testing.pod
stas2002/12/13 02:46:32 Modified:src/docs/general/testing testing.pod Log: spel Revision ChangesPath 1.4 +2 -2 modperl-docs/src/docs/general/testing/testing.pod Index: testing.pod === RCS file: /home/cvs/modperl-docs/src/docs/general/testing/testing.pod,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- testing.pod 13 Dec 2002 10:46:20 - 1.3 +++ testing.pod 13 Dec 2002 10:46:32 - 1.4 @@ -2452,7 +2452,7 @@ % t/TEST -conf -Check the autogenerated I and you will find what +Check the auto-generated I and you will find what port was assigned. Of course it can change when more tests which require a special virtual host are used. @@ -2533,7 +2533,7 @@ some perl code as a content is created. -=head3 Controling the Configuration Order +=head3 Controlling the Configuration Order Sometimes it's important in which order the configuration section of each response package is inserted. C controls the - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/general/testing testing.pod
stas2002/12/13 02:46:20 Modified:src/docs/general/testing testing.pod Log: Document the following configuration issues: - Virtual Hosts - Running Pre-Configuration Code - Controlling the Configuration Order (a new feature!) Revision ChangesPath 1.3 +155 -3modperl-docs/src/docs/general/testing/testing.pod Index: testing.pod === RCS file: /home/cvs/modperl-docs/src/docs/general/testing/testing.pod,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- testing.pod 2 Dec 2002 16:16:18 - 1.2 +++ testing.pod 13 Dec 2002 10:46:20 - 1.3 @@ -2429,11 +2429,163 @@ to a minimum and let Perl do the rest of the job for us. +=head3 Virtual Hosts + +C automatically assigns an unused port for the virtual +host configuration. Just make sure that you use the package name in +the place where you usually specify a I value. For +example for the following package: + + #file:MyApacheTest/Foo.pm + # + package MyApacheTest::Foo; + ... + 1; + __END__ + + + + + + +After running: + + % t/TEST -conf + +Check the autogenerated I and you will find what +port was assigned. Of course it can change when more tests which +require a special virtual host are used. + +Now in the request script, you can figure out what port that virtual +host was assigned, using the package name. For example: + + #file:test_foo.t + #--- + use Apache::TestRequest; + + my $module = "MyApacheTest::Foo;"; + my $config = Apache::Test::config(); + Apache::TestRequest::module($module); + my $hostport = Apache::TestRequest::hostport($config); + + print GET_BODY "http://$hostport/test_foo";; + +=head3 Running Pre-Configuration Code + +Sometimes you need to setup things for the test. This usually includes +creating directories and files, and populating the latter with some +data, which will be used at request time. Instead of performing that +operation in the client script every time a test is run, it's usually +better to do it once when the server is configured. If you wish to run +such a code, all you have to do is to add a special subroutine +C in the response package (assuming that that +response package exists). When server is configured (C) +it scans all the response packages for that subroutine and if found +runs it. + +C accepts two arguments: the package name of +the file this subroutine is defined in and the C +configuration object. + +Here is an example of a package that uses such a subroutine: + + package TestDirective::perlmodule; + + use strict; + use warnings FATAL => 'all'; + + use Apache::Test (); + + use Apache::RequestRec (); + use Apache::RequestIO (); + use File::Spec::Functions qw(catfile); + + use Apache::Const -compile => 'OK'; + + sub handler { + my $r = shift; + + $r->content_type('text/plain'); + $r->puts($ApacheTest::PerlModuleTest::MAGIC || ''); + + Apache::OK; + } + + sub APACHE_TEST_CONFIGURE { + my ($class, $self) = @_; + + my $vars = $self->{vars}; + my $target_dir = catfile $vars->{documentroot}, 'testdirective'; + + my $magic = __PACKAGE__; + my $content = <writefile($file, $content, 1); + } + 1; + +In this example's function a directory is created. Then a file with +some perl code as a content is created. + + +=head3 Controling the Configuration Order + +Sometimes it's important in which order the configuration section of +each response package is inserted. C controls the +insertion order using a special token C. To +decide on the configuration insertion order, C scans all +response packages and tries to match the following pattern: + + /APACHE_TEST_CONFIG_ORDER\s+([+-]?\d+)/ + +So you can assign any integer number (positive or negative). If the +match fails, it's assumed that the token's value is 0. Next a simple +numerical search is performed and those configuration sections with +lower token value are inserted first. + +It's not specified how sections with the same token value are +ordered. This usually depends on the order the files were read from +the disk, which may vary from machine to machine and shouldn't be +relied upon. + +As already mentioned by default all configuration sections have a +token whose value is 0, meaning that their ordering is +unimportant. Now if you want to make sure that some section is +inserted first, assign to it a negative number, e.g.: + + # APACHE_TEST_CONFIG_ORDER -150 +
cvs commit: modperl-docs/src/docs/2.0/user/config custom.pod
stas2002/12/12 02:17:27 Modified:src/docs/2.0/user/config custom.pod Log: got the big example working (core fixes were pending), now need to add explainations Revision ChangesPath 1.2 +316 -0modperl-docs/src/docs/2.0/user/config/custom.pod Index: custom.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/config/custom.pod,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- custom.pod9 Dec 2002 16:47:06 - 1.1 +++ custom.pod12 Dec 2002 10:17:27 - 1.2 @@ -728,6 +728,322 @@ NotifyErrorEmail email_address +=head1 Examples + +=head2 Merging at Work + +In the following example we are going to demonstrate in details how +merging works, by showing various merging technique. + + + + package MyApache::CustomDirectives; + + use strict; + use warnings FATAL => 'all', NONFATAL => 'redefine'; + + use Apache::CmdParms (); + use Apache::Module (); + use Apache::ServerUtil (); + + use Apache::Const -compile => qw(OK); + + our @APACHE_MODULE_COMMANDS = ( + { name => 'MyPlus' }, + { name => 'MyList' }, + { name => 'MyAppend' }, + { name => 'MyOverride' }, + ); + + sub MyPlus { set_val('MyPlus', @_) } + sub MyAppend { set_val('MyAppend', @_) } + sub MyOverride { set_val('MyOverride', @_) } + sub MyList { push_val('MyList',@_) } + + sub DIR_MERGE{ merge(@_) } + sub SERVER_MERGE { merge(@_) } + + sub set_val { + my($key, $self, $parms, $arg) = @_; + $self->{$key} = $arg; + unless ($parms->path) { + my $srv_cfg = Apache::Module->get_config($self, $parms->server); + $srv_cfg->{$key} = $arg; + } + } + + sub push_val { + my($key, $self, $parms, $arg) = @_; + push @{ $self->{$key} }, $arg; + unless ($parms->path) { + my $srv_cfg = Apache::Module->get_config($self, $parms->server); + push @{ $srv_cfg->{$key} }, $arg; + } + } + + sub merge { + my($base, $add) = @_; + + my %mrg = (); + for my $key (keys %$base, %$add) { + next if exists $mrg{$key}; + if ($key eq 'MyPlus') { + $mrg{$key} = ($base->{$key}||0) + ($add->{$key}||0); + } + elsif ($key eq 'MyList') { + push @{ $mrg{$key} }, + @{ $base->{$key}||[] }, @{ $add->{$key}||[] }; + } + elsif ($key eq 'MyAppend') { + $mrg{$key} = join " ", grep defined, $base->{$key}, $add->{$key}; + } + else { + # override mode + $mrg{$key} = $base->{$key} if exists $base->{$key}; + $mrg{$key} = $add->{$key} if exists $add->{$key}; + } + } + + return bless \%mrg, ref($base); + } + + + 1; + __END__ + + + PerlLoadModule MyApache::CustomDirectives + MyPlus 5 + MyList "MainServer" + MyAppend "MainServer" + MyOverride "MainServer" + Listen 8081 + + MyPlus 2 + MyList "VHost" + MyAppend "VHost" + MyOverride "VHost" + + MyPlus 3 + MyList "Dir" + MyAppend "Dir" + MyOverride "Dir" + SetHandler modperl + PerlResponseHandler MyApache::CustomDirectivesTest + + + MyPlus 1 + MyList "SubDir" + MyAppend "SubDir" + MyOverride "SubDir" + + + + SetHandler modperl + PerlResponseHandler MyApache::CustomDirectivesTest + + + package MyApache::CustomDirectivesTest; + + use strict; + use warnings FATAL => 'all', NONFATAL => 'redefine'; + + use Apache::RequestRec (); + use Apache::RequestIO (); + use Apache::Server (); + use Apache::ServerUtil (); + use Apache::Module (); + + use Apache::Const -compile => qw(OK); + + sub get_config { + Apache::Module->get_config('MyApache::CustomDirectives', @_); + } + + sub handler { + my($r) = @_; + my %secs = (); + + $r->content_type('text/plain'); + + my $s = $r->server; + my $dir_cfg = get_config($s, $r->per_dir_config); + my $srv_cfg = get_config($s); + + if ($s->is_virtual) { +
cvs commit: modperl-docs/src/docs/2.0/devel/debug c.pod
stas2002/12/09 18:49:10 Modified:src/docs/2.0/devel/debug c.pod Log: now that we have Devel::CoreDump, should use it instead of developing a new package Revision ChangesPath 1.2 +4 -6 modperl-docs/src/docs/2.0/devel/debug/c.pod Index: c.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/debug/c.pod,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- c.pod 9 Dec 2002 16:29:57 - 1.1 +++ c.pod 10 Dec 2002 02:49:10 - 1.2 @@ -247,15 +247,10 @@ =back -=head1 Obtaining Core Files +=head1 Analyzing Dumped Core Files META: need to review (unfinished) -=head2 ... - - -=head1 Analyzing Dumped Core Files - When your application dies with the I error (which generates a C signal) and optionally generates a I file you can use C or a similar debugger to find out what caused the @@ -316,6 +311,9 @@ Now the software is ready for a proper debug. =head2 Creating a Faulty Package + +META: no longer need to create the package, use C +from CPAN. Need to adjust the rest of the document to use it. Next stage is to create a package that aborts abnormally with the I error. We will write faulty code on purpose, - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/devel/core mpms.pod
stas2002/12/09 08:56:45 Modified:src/docs/2.0/devel config.cfg Added: src/docs/2.0/devel/core mpms.pod Log: another start for a new doc: should eventually cover the mod_perl mpms specific Revision ChangesPath 1.16 +1 -0 modperl-docs/src/docs/2.0/devel/config.cfg Index: config.cfg === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/config.cfg,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- config.cfg9 Dec 2002 16:42:55 - 1.15 +++ config.cfg9 Dec 2002 16:56:44 - 1.16 @@ -12,6 +12,7 @@ chapters => [qw( core/explained.pod core/apache_integration.pod +core/mpms.pod core/coding_style.pod )], 1.1 modperl-docs/src/docs/2.0/devel/core/mpms.pod Index: mpms.pod === =head1 NAME MPMs - Multi-Processing Model Modules =head1 Description Discover what are the available MPMs and how they work with mod_perl. META: This doc is under construction. Owners are wanted. =head1 MPMs Overview =head1 The Worker MPM META: incomplete You can test whether running under threaded env via: C #ifdef USE_ITHREADS /* whatever */ #endif When the server is running under the threaded mpm Cthreaded_mpm> is set to true. Caveats: All per-server data is shared between threads, regardless of locking, changing the value of something like ap_document_root changes it for all threads. Not just the current process/request, the way it was in 1.3. So we can't really support modification of things like ap_document_root at request time, unless the mpm is prefork. we could support modification of modperl per-server data by using r-Erequest_config in the same way push_handlers et al is implemented. But it is not possible to use this approach for anything outside of modperl (ap_document_root for example). =head1 The Prefork MPM META: incomplete =head1 Maintainers Maintainer is the person(s) you should contact with updates, corrections and patches. =over =item * Stas Bekman Estas (at) stason.orgE =back =head1 Authors =over =item * Stas Bekman Estas (at) stason.orgE =back Only the major authors are listed above. For contributors see the Changes file. =cut - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/help help.pod
stas2002/12/09 08:47:41 Modified:src/docs/2.0/user/handlers filters.pod src/docs/2.0/user/help help.pod Log: fix link Revision ChangesPath 1.10 +2 -0 modperl-docs/src/docs/2.0/user/handlers/filters.pod Index: filters.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/handlers/filters.pod,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- filters.pod 24 Nov 2002 12:11:21 - 1.9 +++ filters.pod 9 Dec 2002 16:47:41 - 1.10 @@ -1079,6 +1079,8 @@ ] + + =head1 Maintainers Maintainer is the person(s) you should contact with updates, 1.16 +2 -2 modperl-docs/src/docs/2.0/user/help/help.pod Index: help.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/help/help.pod,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- help.pod 2 Dec 2002 13:16:56 - 1.15 +++ help.pod 9 Dec 2002 16:47:41 - 1.16 @@ -84,8 +84,8 @@ If during C or the use of mod_perl you get a segmentation fault you should send to the list a stack backtrace. This -L -explains how to extract this backtrace. +L explains how to +extract this backtrace. Of course to generate a useful backtrace you need to have mod_perl with debugging symbols in it (and probably perl and/or httpd too). - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user config.cfg
stas2002/12/09 08:47:07 Modified:src/docs/2.0/user config.cfg Added: src/docs/2.0/user/config custom.pod Log: a new doc: Apache Server Configuration Customization in Perl Revision ChangesPath 1.1 modperl-docs/src/docs/2.0/user/config/custom.pod Index: custom.pod === =head1 NAME Apache Server Configuration Customization in Perl =head1 Description This chapter explains how to create custom Apache configuration directives in Perl. WARNING: This doc is under construction =head1 Incentives mod_perl provides several ways to pass custom configuration information to the modules. The simplest way to pass custom information from the configuration file to the Perl module is to use the C> and C> directives. For example: PerlSetVar Secret "Matrix is us" and in the mod_perl code this value can be retrieved as: my $secret = $r->dir_config("Secret"); Another alternative is to add custom configuration directives. There are several reasons for choosing this approach: =over =item * When the expected value is not a simple argument, but must be supplied using a certain syntax, Apache can verify at startup time that this syntax is valid and abort the server start up if the syntax is invalid. =item * Custom configuration directives are faster because their values are parsed at the startup time, whereas C and C values are parsed at the request time. =item * It's possible that some other modules have accidentally chosen to use the same key names but for absolutely different needs. So the two now can't be used together. Of course this collision can be avoided if a unique to your module prefix is used in the key names. For example: PerlSetVar ApacheFooSecret "Matrix is us" =back Finally, modules can be configured in pure Perl using CPerlE Sections|docs::2.0::user::config::config/C_E_lt_PerlE_gt___Sections>> or L, by simply modifying the global variables in the module's package. This approach could be undesirable because it requires a use of globals, which we all try to reduce. A bigger problem with this approach is that you can't have different settings for different sections of the site (since there is only one version of a global variable), something that the previous two approaches easily achieve. =head1 Creating and Using Custom Configuration Directives In mod_perl 2.0, adding new configuration directives is a piece of cake, because it requires no XS code and I, needed in case of mod_perl 1.0. In mod_perl 2.0, custom directives are implemented in pure Perl. Here is a very basic module that declares two new configuration directives: C, which accepts one or more arguments, and C which accepts a single argument. #file:MyApache/MyParameters.pm #- package MyApache::MyParameters; use strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use Apache::Const -compile => qw(OR_ALL ITERATE); use Apache::CmdParms (); use Apache::Module (); our @APACHE_MODULE_COMMANDS = ( { name => 'MyParameter', func => __PACKAGE__ . '::MyParameter', req_override => Apache::OR_ALL, args_how => Apache::ITERATE, errmsg => 'MyParameter Entry1 [Entry2 ... [EntryN]]', }, { name => 'MyOtherParameter', }, ); sub MyParameter { my($self, $parms, @args) = @_; $self->{MyParameter} = [EMAIL PROTECTED]; } 1; And here is how to use it in I: # first load the module so Apache will recognize the new directives PerlLoadModule MyApache::MyParameters MyParameter one two three MyOtherParameter Foo MyParameter eleven twenty MyOtherParameter Bar The following sections discuss this and more advanced modules in detail. A minimal configuration module is comprised of two groups of elements: =over =item * A global array C<@APACHE_MODULE_COMMANDS> for declaring the new directives and their behavior. =item * A subroutine per each new directive, which is called when the directive is seen =back =head2 C<@APACHE_MODULE_COMMANDS> C<@APACHE_MODULE_COMMANDS> is a global array of hash references. Each hash represents a separate new configuration directive. In our example we had: our @APACHE_MODULE_COMMANDS = ( { name => 'MyParameter', func => __PACKAGE__ . '::MyParameter',
cvs commit: modperl-docs/src/docs/2.0/devel Changes.pod config.cfg
stas2002/12/09 08:42:55 Modified:src/docs/2.0/devel Changes.pod config.cfg Log: time to start a performance group Revision ChangesPath 1.4 +6 -0 modperl-docs/src/docs/2.0/devel/Changes.pod Index: Changes.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/Changes.pod,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Changes.pod 9 Dec 2002 16:29:57 - 1.3 +++ Changes.pod 9 Dec 2002 16:42:55 - 1.4 @@ -11,6 +11,12 @@ =head1 ??? +* Started the following docs: + + o mod_perl internals: Apache 2.0 Integration + + o Which Coding Technique is Faster + * Reshuffled the dir/file structure to make more sense, as new docs are getting added. 1.15 +6 -2 modperl-docs/src/docs/2.0/devel/config.cfg Index: config.cfg === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/config.cfg,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- config.cfg9 Dec 2002 16:39:33 - 1.14 +++ config.cfg9 Dec 2002 16:42:55 - 1.15 @@ -13,13 +13,17 @@ core/explained.pod core/apache_integration.pod core/coding_style.pod -performance/size_matters.pod -performance/speed_matters.pod )], group=> '3rd party modules Development with mod_perl 2.0', chapters => [qw( porting/porting.pod +)], + +group=> 'Core Performance Issues', +chapters => [qw( +performance/size_matters.pod +performance/speed_matters.pod )], group=> 'Debugging', - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/devel/performance speed_matters.pod
stas2002/12/09 08:39:34 Modified:src/docs/2.0/devel config.cfg src/docs/2.0/devel/core apache_integration.pod Added: src/docs/2.0/devel/performance speed_matters.pod Log: Throw in a beginning of: Which Coding Technique is Faster Owners are wanted! Revision ChangesPath 1.14 +1 -0 modperl-docs/src/docs/2.0/devel/config.cfg Index: config.cfg === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/config.cfg,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- config.cfg9 Dec 2002 16:31:12 - 1.13 +++ config.cfg9 Dec 2002 16:39:33 - 1.14 @@ -14,6 +14,7 @@ core/apache_integration.pod core/coding_style.pod performance/size_matters.pod +performance/speed_matters.pod )], group=> '3rd party modules Development with mod_perl 2.0', 1.2 +1 -1 modperl-docs/src/docs/2.0/devel/core/apache_integration.pod Index: apache_integration.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/core/apache_integration.pod,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- apache_integration.pod9 Dec 2002 16:29:57 - 1.1 +++ apache_integration.pod9 Dec 2002 16:39:34 - 1.2 @@ -1,6 +1,6 @@ =head1 NAME -mod_perl internals: Apache 2.0 integration +mod_perl internals: Apache 2.0 Integration =head1 Description 1.1 modperl-docs/src/docs/2.0/devel/performance/speed_matters.pod Index: speed_matters.pod === =head1 NAME Which Coding Technique is Faster =head1 Description This document tries to show more efficient coding styles by benchmarking various styles. WARNING: This doc is under construction META: for now these are just unprocessed snippets from the mailing list. Please help me to make these into useful essays. =head1 backticks vs XS META: unprocessed yet. compare the difference of calling an xsub that does _nothing_ vs. a backticked program that does _nothing_. /* file:test.c */ int main(int argc, char **argv, char **env) { return 1; } /* file:TickTest.xs */ #include "EXTERN.h" #include "perl.h" #include "XSUB.h" MODULE = TickTest PACKAGE = TickTest void foo() CODE: # file:test.pl use blib; use TickTest (); use Benchmark; timethese(100_000, { backtick => sub { `./test` }, xs => sub { TickTest::foo() }, }); Results: Benchmark: timing 10 iterations of backtick, xs... backtick: 292 wallclock secs (18.68 usr 43.93 sys + 142.43 cusr 84.00 csys = 289.04 CPU) @ 1597.19/s (n=10) xs: -1 wallclock secs ( 0.25 usr + 0.00 sys = 0.25 CPU) @ 40.00/s (n=10) (warning: too few iterations for a reliable count) =head1 sv_catpvn vs. fprintf META: unprocessed yet. and what i'm trying to say is that if both the xs code and external program are doing the same thing, xs will be heaps faster than backticking a program. your xsub and external program are not doing the same thing. i'm guessing part of the difference in your code is due to fprintf having a pre-allocated buffer, whereas the SV's SvPVX has not been pre-allocated and gets realloc-ed each time you call sv_catpv. have a look at the code below, fprintf is faster than sv_catpvn, but if the SvPVX is preallocated, sv_catpvn becomes faster than fprintf: timethese(1_000, { fprintf => sub { TickTest::fprintf() }, svcat => sub { TickTest::svcat() }, svcat_pre => sub { TickTest::svcat_pre() }, }); Benchmark: timing 1000 iterations of fprintf, svcat, svcat_pre... fprintf: 9 wallclock secs ( 8.72 usr + 0.00 sys = 8.72 CPU) @ 114.68/s (n=1000) svcat: 13 wallclock secs (12.82 usr + 0.00 sys = 12.82 CPU) @ 78.00/s (n=1000) svcat_pre: 2 wallclock secs ( 2.75 usr + 0.00 sys = 2.75 CPU) @ 363.64/s (n=1000) #include "EXTERN.h" #include "perl.h" #include "XSUB.h" static FILE *devnull; MODULE = TickTest PACKAGE = TickTest BOOT: devnull = fopen("/dev/null", "w"); void fprintf() CODE: { int i; char buffer[8292]; for (i=0; istas (at) stason.orgE =head1 Authors =over =item * Stas Bekman Estas (at) stason.org
cvs commit: modperl-docs/src/docs/2.0/devel config.cfg
stas2002/12/09 08:31:12 Modified:src/docs/2.0/devel config.cfg Log: a new doc: mod_perl internals: Apache 2.0 Integration (by mistake committed earlier) Revision ChangesPath 1.13 +1 -0 modperl-docs/src/docs/2.0/devel/config.cfg Index: config.cfg === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/config.cfg,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- config.cfg9 Dec 2002 16:29:57 - 1.12 +++ config.cfg9 Dec 2002 16:31:12 - 1.13 @@ -11,6 +11,7 @@ group=> 'mod_perl 2.0 Core Development', chapters => [qw( core/explained.pod +core/apache_integration.pod core/coding_style.pod performance/size_matters.pod )], - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/devel/performance size_matters.pod
stas2002/12/09 08:29:58 Modified:src/docs/2.0/devel Changes.pod config.cfg Added: src/docs/2.0/devel/core apache_integration.pod coding_style.pod explained.pod src/docs/2.0/devel/debug c.pod perl.pod src/docs/2.0/devel/debug/code .debug-modperl-init .debug-modperl-register .debug-modperl-xs src/docs/2.0/devel/performance size_matters.pod Removed: src/docs/2.0/devel/core_explained core_explained.pod src/docs/2.0/devel/debug_c debug_c.pod src/docs/2.0/devel/debug_c/code .debug-modperl-init .debug-modperl-register .debug-modperl-xs src/docs/2.0/devel/debug_perl debug_perl.pod src/docs/2.0/devel/modperl_style modperl_style.pod src/docs/2.0/devel/perf_sizeof perf_sizeof.pod Log: as the number of documents here grows, we need a better grouping. so this commit just changes some dir/file names, no content change. Revision ChangesPath 1.3 +5 -0 modperl-docs/src/docs/2.0/devel/Changes.pod Index: Changes.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/Changes.pod,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Changes.pod 31 Jul 2002 14:16:48 - 1.2 +++ Changes.pod 9 Dec 2002 16:29:57 - 1.3 @@ -9,6 +9,11 @@ The most recent changes are listed first. +=head1 ??? + +* Reshuffled the dir/file structure to make more sense, as new docs + are getting added. + =head1 Wed Mar 20 21:20:20 SGT 2002 * docs::general::testing::testing: 1.12 +11 -6 modperl-docs/src/docs/2.0/devel/config.cfg Index: config.cfg === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/config.cfg,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- config.cfg13 Aug 2002 11:46:21 - 1.11 +++ config.cfg9 Dec 2002 16:29:57 - 1.12 @@ -10,16 +10,21 @@ group=> 'mod_perl 2.0 Core Development', chapters => [qw( -core_explained/core_explained.pod -modperl_style/modperl_style.pod -perf_sizeof/perf_sizeof.pod +core/explained.pod +core/coding_style.pod +performance/size_matters.pod )], group=> '3rd party modules Development with mod_perl 2.0', chapters => [qw( porting/porting.pod -debug_perl/debug_perl.pod -debug_c/debug_c.pod +)], + +group=> 'Debugging', +chapters => [qw( +porting/porting.pod +debug/perl.pod +debug/c.pod )], group=> 'Help', @@ -30,7 +35,7 @@ changes => 'Changes.pod', copy_glob => [qw( -debug_c/code +debug/code )], 1.1 modperl-docs/src/docs/2.0/devel/core/apache_integration.pod Index: apache_integration.pod === =head1 NAME mod_perl internals: Apache 2.0 integration =head1 Description This document should help to understand the initialization, request processing and shutdown process of the mod_perl module. This knowledge is essential for a less-painful debugging experience. It should also help to know where a new code should be added when a new feature is added. Make sure to read also: L. =head1 Startup Apache starts itself and immediately restart itself. The following sections discuss what happens to mod_perl during this period. =head2 The Link Between mod_perl and httpd I defines a special structure: module AP_MODULE_DECLARE_DATA perl_module = { STANDARD20_MODULE_STUFF, modperl_config_dir_create, /* dir config creater */ modperl_config_dir_merge, /* dir merger --- default is to override */ modperl_config_srv_create, /* server config */ modperl_config_srv_merge, /* merge server config */ modperl_cmds, /* table of config file commands */ modperl_register_hooks,/* register hooks */ }; Apache uses this structure to hook mod_perl in, and it specifies six custom callbacks which Apache will call at various stages that will be explained later. C is a standard macro defined in I. Currently its main use if for attaching Apache version magic numbers, so the previously compiled module won't be attempted to be used with newer Apache versions, whose API may have changed. C is a struct, that defines the mod_perl configuration directives and the callbacks to
cvs commit: modperl-docs/src/docs/2.0/devel/debug/code - New directory
stas2002/12/09 08:28:28 modperl-docs/src/docs/2.0/devel/debug/code - New directory - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/devel/debug - New directory
stas2002/12/09 08:28:23 modperl-docs/src/docs/2.0/devel/debug - New directory - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/devel/performance - New directory
stas2002/12/09 08:28:14 modperl-docs/src/docs/2.0/devel/performance - New directory - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/devel/core - New directory
stas2002/12/09 08:28:05 modperl-docs/src/docs/2.0/devel/core - New directory - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/offsite articles.pod
stas2002/12/09 08:12:18 Modified:src/docs/offsite articles.pod Log: David E. Wheeler perl.com articles Revision ChangesPath 1.13 +3 -0 modperl-docs/src/docs/offsite/articles.pod Index: articles.pod === RCS file: /home/cvs/modperl-docs/src/docs/offsite/articles.pod,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- articles.pod 9 Dec 2002 05:32:25 - 1.12 +++ articles.pod 9 Dec 2002 16:12:18 - 1.13 @@ -101,9 +101,12 @@ =item * mod_perl articles at Perl.com + http://www.perl.com/pub/q/Article_Archive#mod_perl (better use search and you will find other mod_perl articles which weren't catalogued under mod_perl category) + +Articles by David E. Wheeler: http://www.oreillynet.com/pub/au/1059 =item * - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/devel/debug_c/code .debug-modperl-register
stas2002/12/08 23:22:41 Modified:src/docs/2.0/devel/debug_c/code .debug-modperl-register Log: correct the explanation Revision ChangesPath 1.2 +4 -3 modperl-docs/src/docs/2.0/devel/debug_c/code/.debug-modperl-register Index: .debug-modperl-register === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/debug_c/code/.debug-modperl-register,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- .debug-modperl-register 9 Dec 2002 06:47:37 - 1.1 +++ .debug-modperl-register 9 Dec 2002 07:22:41 - 1.2 @@ -54,9 +54,10 @@ # then continue. # Assuming that 'LoadModule perl_module' is the first LoadModule -# directive in httpd.conf, you need just one 'finish'. If it's not the -# first you need as many 'finish' commands as the number of -# 'LoadModule foo' before perl_module, plus one. +# directive in httpd.conf, you need just one 'continue' after +# 'ap_add_module'. If it's not the first one, you need to add as many +# 'continue' commands as the number of 'LoadModule foo' before +# perl_module, but before setting the 'ap_add_module' bp. # # If mod_perl is compiled statically, everything is already preloaded, # so you can set modperl_* the breakpoints right away - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/devel/debug_c/code .debug-modperl-register
stas2002/12/08 22:47:37 Modified:src/docs/2.0/devel/debug_c debug_c.pod Added: src/docs/2.0/devel/debug_c/code .debug-modperl-register Log: add another startup script which allows to break at the very early entrance to mod_perl Revision ChangesPath 1.11 +13 -2 modperl-docs/src/docs/2.0/devel/debug_c/debug_c.pod Index: debug_c.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/debug_c/debug_c.pod,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- debug_c.pod 21 Jun 2002 17:26:20 - 1.10 +++ debug_c.pod 9 Dec 2002 06:47:37 - 1.11 @@ -216,13 +216,24 @@ =item * Debugging mod_perl Initialization The F startup script breaks at the -modperl_hook_init() function, which is useful for debugging code at +C function, which is useful for debugging code at the modperl's initialization phase. +=item * Debugging mod_perl's Hooks Registeration With httpd + +Similar to the previous startup script, the +F startup script breaks at the +C, which is the very first hook called in +the mod_perl land. Therefore use this one if you need to start +debugging at an even earlier entry point into mod_perl. + +Refer to the notes inside the script to adjust it for a specific +I file. + =item * Debugging mod_perl XS Extensions The F startup script breaks at the -mpxs_Apache__Filter_print() function implemented in +C function implemented in I. This is an example of debugging code in XS Extensions. For this particular example the complete test case is: 1.1 modperl-docs/src/docs/2.0/devel/debug_c/code/.debug-modperl-register Index: .debug-modperl-register === # This gdb startup script allows to break at the very first invocation # of mod_perl initialization, just after it was loaded. When the # perl_module is loaded, and its pointer struct is added via # ap_add_module(), the first hook that will be called is # modperl_register_hooks(). # # Invoke as: # gdb -command=.debug-modperl-register # # see ADJUST notes for things that may need to be adjusted define sharedap sharedlibrary apr sharedlibrary aprutil #sharedlibrary mod_ssl.so end define sharedperl sharedlibrary libperl end ### Run ### # ADJUST: the path to the httpd executable if needed file ~/httpd/prefork/bin/httpd handle SIGPIPE nostop handle SIGPIPE pass set auto-solib-add 0 tbreak main # assuming that mod_dso is compiled in b load_module # ADJUST: the httpd.conf file's path if needed # ADJUST: add -DPERL_USEITHREADS to debug threaded mpms run -d `pwd`/t -f `pwd`/t/conf/httpd.conf \ -DONE_PROCESS -DNO_DETATCH -DAPACHE2 # skip over 'tbreak main' continue # In order to set the breakpoint in mod_perl.so, we need to get to # the point where it's loaded. # # With static mod_perl, the bp can be set right away # # With DSO mod_perl, mod_dso's load_module() loads the mod_perl.so # object and it immediately calls ap_add_module(), which calls # modperl_register_hooks(). So if we want to bp at the latter, we need # to stop at load_module(), set the 'bp modperl_register_hooks' and # then continue. # Assuming that 'LoadModule perl_module' is the first LoadModule # directive in httpd.conf, you need just one 'finish'. If it's not the # first you need as many 'finish' commands as the number of # 'LoadModule foo' before perl_module, plus one. # # If mod_perl is compiled statically, everything is already preloaded, # so you can set modperl_* the breakpoints right away b ap_add_module continue sharedlibrary modperl b modperl_register_hooks continue #b modperl_hook_init #b modperl_config_srv_create #b modperl_startup #b modperl_init_vhost #b modperl_dir_config #b modperl_cmd_load_module #modperl_config_apply_PerlModule # ADJUST: uncomment if you need to step through the code in apr libs #sharedap # ADJUST: uncomment if you need to step through the code in perlib #sharedperl - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/offsite articles.pod
stas2002/12/08 21:32:25 Modified:src/docs/offsite articles.pod Log: correct the family name spelling Revision ChangesPath 1.12 +1 -1 modperl-docs/src/docs/offsite/articles.pod Index: articles.pod === RCS file: /home/cvs/modperl-docs/src/docs/offsite/articles.pod,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- articles.pod 3 Dec 2002 14:24:08 - 1.11 +++ articles.pod 9 Dec 2002 05:32:25 - 1.12 @@ -192,7 +192,7 @@ =item * Several of Stas' mod_perl articles translated to Russian by Inga -Zaharova: http://www.providerz.ru/articles/perl/why_mod_perl.html +Zakharova: http://www.providerz.ru/articles/perl/why_mod_perl.html http://www.providerz.ru/articles/perl/mod_perl_in_30_minutes_1.html =item * - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/download docs.pod
stas2002/12/06 09:01:51 Modified:src/download docs.pod Log: no need for multiviews, was c-n-p Revision ChangesPath 1.10 +0 -1 modperl-docs/src/download/docs.pod Index: docs.pod === RCS file: /home/cvs/modperl-docs/src/download/docs.pod,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- docs.pod 4 Dec 2002 05:11:01 - 1.9 +++ docs.pod 6 Dec 2002 17:01:51 - 1.10 @@ -155,7 +155,6 @@ Alias /modperl/ "/usr/local/modperl-docs/dst_html/" - Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/compat compat.pod
stas2002/12/06 08:24:32 Modified:src/docs/2.0/user/compat compat.pod Log: fix markup Revision ChangesPath 1.36 +5 -2 modperl-docs/src/docs/2.0/user/compat/compat.pod Index: compat.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/compat/compat.pod,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- compat.pod6 Dec 2002 13:10:12 - 1.35 +++ compat.pod6 Dec 2002 16:24:32 - 1.36 @@ -334,15 +334,18 @@ =head1 C Methods and Variables -=head C<$Apache::Server::CWD> +=head2 C<$Apache::Server::CWD> C<$Apache::Server::CWD> is deprecated and exists only in C. -=head1 C<$Apache::Server::AddPerlVersion> +=head2 C<$Apache::Server::AddPerlVersion> C<$Apache::Server::AddPerlVersion> is deprecated and exists only in C. + + + =head1 Server Object Methods - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/compat compat.pod
stas2002/12/06 05:10:12 Modified:src/docs/2.0/user/compat compat.pod Log: document $Apache::Server::AddPerlVersion Revision ChangesPath 1.35 +3 -1 modperl-docs/src/docs/2.0/user/compat/compat.pod Index: compat.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/compat/compat.pod,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- compat.pod6 Dec 2002 12:42:29 - 1.34 +++ compat.pod6 Dec 2002 13:10:12 - 1.35 @@ -339,8 +339,10 @@ C<$Apache::Server::CWD> is deprecated and exists only in C. +=head1 C<$Apache::Server::AddPerlVersion> - +C<$Apache::Server::AddPerlVersion> is deprecated and exists only in +C. =head1 Server Object Methods - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/compat compat.pod
stas2002/12/06 04:42:30 Modified:src/docs/2.0/user/compat compat.pod Log: document $Apache::Server::CWD Revision ChangesPath 1.34 +7 -1 modperl-docs/src/docs/2.0/user/compat/compat.pod Index: compat.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/compat/compat.pod,v retrieving revision 1.33 retrieving revision 1.34 diff -u -r1.33 -r1.34 --- compat.pod5 Dec 2002 10:18:32 - 1.33 +++ compat.pod6 Dec 2002 12:42:29 - 1.34 @@ -332,6 +332,13 @@ C> manpage. +=head1 C Methods and Variables + +=head C<$Apache::Server::CWD> + +C<$Apache::Server::CWD> is deprecated and exists only in +C. + @@ -350,7 +357,6 @@ passed as the first argument to the callback function. See the C> manpage. - - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/config config.pod
stas2002/12/05 23:45:36 Modified:src/docs/2.0/user/config config.pod Log: document the default interpreter pool's settings Revision ChangesPath 1.30 +18 -2 modperl-docs/src/docs/2.0/user/config/config.pod Index: config.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/config/config.pod,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- config.pod4 Dec 2002 02:59:21 - 1.29 +++ config.pod6 Dec 2002 07:45:36 - 1.30 @@ -700,6 +700,8 @@ The number of interpreters to clone at startup time. +Default value: 3 + =head2 C If all running interpreters are in use, mod_perl will clone new @@ -708,22 +710,33 @@ will block (via COND_WAIT()) until one becomes available (signaled via COND_SIGNAL()). +Default value: 5 + =head2 C The minimum number of available interpreters this parameter will clone interpreters up to C, before a request comes in. +Default value: 3 + + =head2 C mod_perl will throttle down the number of interpreters to this number as those in use become available. +Default value: 3 + + =head2 C The maximum number of requests an interpreter should serve, the interpreter is destroyed when the number is reached and replaced with a fresh clone. +Default value: 2000 + + =head2 C As mentioned, when a request in a threaded mpm is handled by mod_perl, @@ -769,6 +782,9 @@ PerlInterpScope connection +Default value: C + + =head1 Debug Directives @@ -800,8 +816,8 @@ s ( 64) perl sections t (128) benchmark-ish timings -When C is not specified, the tracing level will be set to the -value of the C<$ENV{MOD_PERL_TRACE}> environment variable. +When C is not specified, the tracing level will be set to +the value of the C<$ENV{MOD_PERL_TRACE}> environment variable. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/compat compat.pod
stas2002/12/05 02:18:32 Modified:src/docs/2.0/user/compat compat.pod Log: use well defined L<> to the 2.0 packages, to avoid collision with 1.0 packages of the same name, even though the 2.0 location is searched first Revision ChangesPath 1.33 +42 -20modperl-docs/src/docs/2.0/user/compat/compat.pod Index: compat.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/compat/compat.pod,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- compat.pod4 Dec 2002 02:41:53 - 1.32 +++ compat.pod5 Dec 2002 10:18:32 - 1.33 @@ -82,6 +82,15 @@ PerlFreshRestart +=head2 Apache Configuration Customization + +mod_perl 2.0 has slightly changed the mechanism for L and now also makes it easy to +access an Apache parsed configuration tree's values. + +META: add L<> to the config tree access when it'll be written. + @@ -183,15 +192,15 @@ =over -=item C> +=item C> Apache constants -=item C> +=item C> Apache Portable Runtime constants -=item C> +=item C> mod_perl specific constants @@ -282,7 +291,9 @@ C residing inside C. -See the C> manpage. +See the +C> +manpage. =head2 C @@ -290,7 +301,9 @@ which is a function (not a method) and accepts a single optional argument: status, whose default is 0 (== do nothing). -See the C> manpage. +See the +C> +manpage. =head2 C @@ -315,7 +328,8 @@ Apache->server->log_error -instead. See the C> manpage. +instead. See the +C> manpage. @@ -335,7 +349,7 @@ where the last argument C<$data> is optional, and if supplied will be passed as the first argument to the callback function. -See the C> manpage. +See the C> manpage. @@ -352,15 +366,16 @@ =head2 C<$r-Elookup_uri> C<$r-Elookup_file> and C<$r-Elookup_uri> didn't change their -functionality but moved into C>. Before using -them, add: +functionality but moved into +C>. +Before using them, add: use Apache::SubRequest; =head2 C<$r-Eget_remote_host> C<$r-Eget_remote_host> has been renamed and moved into the package -C>: +C>: use Apache::Connection; $r->connection->get_remote_host(); @@ -413,7 +428,7 @@ =back Instead you should use C's C and similar -methods to do the parsing for you. See the C> +methods to do the parsing for you. See the C> manpage. XXX: ...when Apache::Request will be ported to 2.0. For now you can @@ -474,12 +489,12 @@ =head2 C<$r-Elog_reason> C<$r-Elog_reason> is not available in mod_perl 2.0 API. Use the -other standard logging functions provided by the C> +other standard logging functions provided by the C> module. For example: $r->log_error("it works!"); -See the C> manpage. +See the C> manpage. =head2 C<$r-Eregister_cleanup> @@ -584,27 +599,33 @@ =head2 C -This function now belongs to the module C>. +This function now belongs to the module +C>. =head2 C -This function now belongs to the module C>. +This function now belongs to the module +C>. =head2 C -This function now belongs to the module C>. +This function now belongs to the module +C>. =head2 C -This function now belongs to the module C>. +This function now belongs to the module +C>. =head2 C -This function now belongs to the module C>. +This function now belongs to the module +C>. =head2 C -This function now belongs to the module C>. +This function now belongs to the module +C>. @@ -619,7 +640,8 @@ C has been replaced with C, which returns formatted strings of only -4 characters long. See the C> manpage. +4 characters long. See the +C> manpage. =head2 C - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user config.cfg
stas2002/12/05 00:56:10 Modified:src/docs/2.0/user config.cfg Log: link the new chapter Revision ChangesPath 1.16 +1 -0 modperl-docs/src/docs/2.0/user/config.cfg Index: config.cfg === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/config.cfg,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- config.cfg29 Nov 2002 04:15:52 - 1.15 +++ config.cfg5 Dec 2002 08:56:10 - 1.16 @@ -11,6 +11,7 @@ group=> 'Introduction', chapters => [qw( intro/start_fast.pod +intro/what_is_new.pod overview/overview.pod design/design.pod )], - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/intro what_is_new.pod
stas2002/12/05 00:55:49 Added: src/docs/2.0/user/intro what_is_new.pod Log: contribute a chapter from my tutorial: "what's new under the sun", which supersedes mostly the overview chapter that we have Revision ChangesPath 1.1 modperl-docs/src/docs/2.0/user/intro/what_is_new.pod Index: what_is_new.pod === =head1 NAME What's new under the sun? =head1 Description This chapter presents the new features of Apache 2.0, Perl 5.6.0 - 5.8.0 and their influence on mod_perl 2.0. =head1 Why mod_perl, the Next Generation Here and in the rest of this document we refer to mod_perl 1.x series as mod_perl 1.0 and, 2.0.x as mod_perl 2.0 to keep things simple. Similarly we call Apache 1.3.x series as Apache 1.3 and 2.0.x as Apache 2.0 Since Doug MacEachern has introduced mod_perl 1.0 in 1996, he had to adjust source code to the many changes Apache and Perl went through, while staying compatible with the older versions, leading to a very complex source code, with hundreds of C<#ifdefs> and workarounds for various incompatibilities in older Perl and Apache versions. When Apache 2.0 development was underway, the new threads design was introduced, which couldn't be supported by the existing Perl version, since it required thread-safe Perl interpreters. Think of it as a conspiracy or just a lucky coincidence, on March 10, 2002, the first Apache 2.0 alpha version was released. 13 days later, on March 23, 2002, Perl 5.6.0 has been released. And guess what, Perl 5.6.0 was the first Perl version to support the internal thread-safeness across multiple interpreters. Since Perl 5.6.0 and Apache 2.0 were the very minimum requirements there was no need to support older version and it was a great idea to start mod_perl 2.0 code base from scratch, incorporating the lessons learned during the 5 years of mod_perl's existence. The new version includes a mechanism for an automatic building of the Perl interface to Apache API, which allowed us to easily adjust mod_perl 2.0 to ever changing Apache 2.0 API, during its development period. Another important feature is the C framework, which was originally developed for mod_perl 2.0, but then was adopted by Apache 2.0 developers to test the core server features and third party modules. Moreover the tests written using the C framework could be run with Apache 1.0 and 2.0, assuming that both supported the same features. There are multiple other interesting changes that have already happened to mod_perl in version 2.0 and more will be developed in the future. Some of these will be covered in this document and some you will discover on your own while reading mod_perl documentation. =head1 What's new in Apache 2.0 Apache 2.0 has introduces numerous new features and enhancements. Here are the most important new features: =over =item * I (APR) The APR presents a standard API for server applications, covering file I/O, logging, shared memory, threads, managing child processes and many other functionalities needed for developing the Apache core and third party modules in a portable and effective way. One of the important effects is that it significantly simplifies the code that uses the APR making it much easier to review and understand the Apache code, increasing the number of revealed bugs and contributed patches. The APR uses the concept of memory pools, which significantly simplifies the memory management code and reduces the possibility of having memory leaks, which always haunt C programmers. =item * I/O Filtering Apache 2.0 allows multiple modules to filter both the request and the response. Now one module can pipe its output as an input to another module as if another module was receiving the data directly from the TCP stream. The same mechanism works with the generated response. With I/O filtering in place, things like SSL, data (de-)compression and other manipulations are done very easily. The I/O filtering is based on the concept of bucket brigades and implemented in the APR. =item * I (MPMs). In the previous Apache generation the same code base was trying to handle a management of incoming requests for different platforms, which lead to scalability problems on certain platforms, mainly on those which are different from Unix. This also lead to an undesired complexity of the code. Apache 2.0 introduces the concept of Multi Processing Model modules, whose main responsibility is to map the incoming requests to either threads, processes or a threads/processes hybrid. Now it's possible to write different processing modules specific to various platforms. For example the Apache 2.0 on Windows is much more efficient n
cvs commit: modperl-docs/src/docs/2.0/user/handlers http.pod
stas2002/12/04 23:40:51 Modified:src/docs/2.0/user/handlers http.pod Log: a minor clarification Revision ChangesPath 1.9 +11 -9 modperl-docs/src/docs/2.0/user/handlers/http.pod Index: http.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/handlers/http.pod,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- http.pod 5 Dec 2002 07:38:42 - 1.8 +++ http.pod 5 Dec 2002 07:40:51 - 1.9 @@ -562,9 +562,10 @@ It's important to notice that C can be configured -for any subsection of the site, no matter whether it's served by -mod_perl or not. For example to run the handler from our example for -all requests to the server simply add to I: +for any subsection of the site, no matter whether it's served by a +mod_perl response handler or not. For example to run the handler from +our example for all requests to the server simply add to +I: PerlAccessHandler MyApache::BlockByIP @@ -682,9 +683,9 @@ Just like C and other mod_perl handlers, C can be configured for any subsection of the site, -no matter whether it's served by mod_perl or not. For example to use -the authentication handler from the last example for any requests to -the site, simply use: +no matter whether it's served by a mod_perl response handler or +not. For example to use the authentication handler from the last +example for any requests to the site, simply use: PerlAuthenHandler MyApache::SecretLengthAuth @@ -1157,9 +1158,10 @@ 127.0.0.1 [Sat Aug 31 01:50:39 2002] "/users/eric/test.pl" 200 8 It's important to notice that C can be configured for -any subsection of the site, no matter whether it's served by mod_perl -or not. For example to run the handler from our example for all -requests to the server simply add to I: +any subsection of the site, no matter whether it's served by a +mod_perl response handler or not. For example to run the handler from +our example for all requests to the server, simply add to +I: PerlLogHandler MyApache::LogPerUser - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/docs/2.0/user/handlers http.pod
stas2002/12/04 23:38:42 Modified:src/docs/2.0/user/handlers http.pod Log: add notes/examples that httpd handlers can be used without mod_perl response handler Revision ChangesPath 1.8 +43 -2 modperl-docs/src/docs/2.0/user/handlers/http.pod Index: http.pod === RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/handlers/http.pod,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- http.pod 4 Dec 2002 03:00:33 - 1.7 +++ http.pod 5 Dec 2002 07:38:42 - 1.8 @@ -561,6 +561,14 @@ Options +ExecCGI +It's important to notice that C can be configured +for any subsection of the site, no matter whether it's served by +mod_perl or not. For example to run the handler from our example for +all requests to the server simply add to I: + + + PerlAccessHandler MyApache::BlockByIP + =head2 PerlAuthenHandler @@ -672,6 +680,19 @@ Require valid-user +Just like C and other mod_perl handlers, +C can be configured for any subsection of the site, +no matter whether it's served by mod_perl or not. For example to use +the authentication handler from the last example for any requests to +the site, simply use: + + + PerlAuthenHandler MyApache::SecretLengthAuth + AuthType Basic + AuthName "The Gate" + Require valid-user + + =head2 PerlAuthzHandler @@ -773,9 +794,16 @@ Require valid-user +And if you want to run the authentication and authorization for the +whole site, simply add: - - + + PerlAuthenHandler MyApache::SecretLengthAuth + PerlAuthzHandler MyApache::SecretResourceAuthz + AuthType Basic + AuthName "The Secret Gate" + Require valid-user + @@ -1127,6 +1155,19 @@ and to I: 127.0.0.1 [Sat Aug 31 01:50:39 2002] "/users/eric/test.pl" 200 8 + +It's important to notice that C can be configured for +any subsection of the site, no matter whether it's served by mod_perl +or not. For example to run the handler from our example for all +requests to the server simply add to I: + + + PerlLogHandler MyApache::LogPerUser + + +Since the C phase is of type +C>, all other +logging handlers will be called as well. =head2 PerlCleanupHandler - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: modperl-docs/src/outstanding/success_stories www.inteligo.pl.pod www.inteligo.pl.txt www.redhat.com.pod www.redhat.com.txt config.cfg
stas2002/12/04 18:37:54 Modified:src/outstanding sites.html src/outstanding/success_stories config.cfg Added: src/outstanding/success_stories www.inteligo.pl.pod www.inteligo.pl.txt www.redhat.com.pod www.redhat.com.txt Log: add the stories for www.redhat.com and www.inteligo.pl Revision ChangesPath 1.13 +14 -0 modperl-docs/src/outstanding/sites.html Index: sites.html === RCS file: /home/cvs/modperl-docs/src/outstanding/sites.html,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- sites.html15 Jul 2002 18:09:20 - 1.12 +++ sites.html5 Dec 2002 02:37:54 - 1.13 @@ -102,6 +102,20 @@ +Banking: http://www.inteligo.pl";>Inteligo, the +Polish internet bank, recently migrated its transactional web service +(the application used by the bank clients to make different kinds of +payment orders, check account balances etc) from complicated +Java-based solution to the mod_perl application. The application +implements web frontend to the business services implemented by the +main bank system and accessed via the bank middleware. It is worth +mentioning that the application constitute the main access channel for +the bank clients. Read the whole story. + + + + Technology news: http://home.wired.com/";>WIRED Digital uses mod_perl (on linux and solaris) for several applications. It is used widely throughout Marcin.Kasperski EatE acn.waw.plE exclaimed: =over =item * Date: 04 Dec 2002 22:52:29 +0100 =item * URL: http://www.inteligo.pl =back I am more than happy being now able to add the new nice reference. Please, patch my English where necessary... Polish internet bank named Inteligo (http://www.inteligo.pl) recently migrated its transactional web service (the application used by the bank clients to make different kinds of payment orders, check account balances etc) from complicated Java-based solution to the modperl application. The application implements web frontend to the business services implemented by the main bank system and accessed via the bank middleware. It is worth mentioning that the application constitute the main access channel for the bank clients. After a few days of productional use the application is perceived to be much faster and lighter than the one previously used. Two words of warning: - inteligo 'informational' website (the pages visible under www.inteligo.pl) still use PHP and probably will continue to, - don't treat this as easy 'perl is faster than Java' claim, there was a lot of design and programming work behind the new application... Being a person who suggested using this technology and worked in a core development team I can admit that modperl fulfilled myp erformance expectations and allowed to develop complicated application fairly quickly. Thanks to all the people who developed this nice piece of software and its documentation and to everyone who answered my and my colleagues questions during the project. =cut 1.1 modperl-docs/src/outstanding/success_stories/www.inteligo.pl.txt Index: www.inteligo.pl.txt === From: Marcin Kasperski acn.waw.pl> Organization: Ogólnopolski Strajk Przeciwko Strajkom Date: 04 Dec 2002 22:52:29 +0100 Subject: modperl usage in financial institutions URL: http://www.inteligo.pl I am more than happy being now able to add the new nice reference. Please, patch my English where necessary... Polish internet bank named Inteligo (http://www.inteligo.pl) recently migrated its transactional web service (the application used by the bank clients to make different kinds of payment orders, check account balances etc) from complicated Java-based solution to the modperl application. The application implements web frontend to the business services implemented by the main bank system and accessed via the bank middleware. It is worth mentioning that the application constitute the main access channel for the bank clients. After a few days of productional use the application is perceived to be much faster and lighter than the one previously used. Two words of warning: - inteligo 'informational' website (the pages visible under www.inteligo.pl) still use PHP and probably will continue to, - don't treat this as easy 'perl is faster than Java' claim, there was a lot of design and programming work behind the new application... Being a person who suggested using this techno