stas        02/05/22 05:13:44

  Modified:    src/docs/2.0/user/config config.pod
               src/docs/2.0/user/design design.pod
               src/docs/2.0/user/overview overview.pod
  Log:
  working on the config docs, fixing other things on the way
  
  Revision  Changes    Path
  1.8       +308 -126  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.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- config.pod        14 Apr 2002 07:11:48 -0000      1.7
  +++ config.pod        22 May 2002 12:13:44 -0000      1.8
  @@ -8,210 +8,357 @@
   
   =head1 mod_perl configuration directives
   
  -=head2 Installing handlers
  +Similar to mod_perl 1.x, in order to use mod_perl 2.0 a few
  +configuration settings should be added to I<httpd.conf>. They are
  +quite similar to 1.x settings but some directives were renamed and new
  +directives were added.
   
  -=over 4
  +=head1 Enabling mod_perl
   
  -=item PerlChildInitHandler
  +To enable mod_perl built as DSO add to I<httpd.conf>:
   
  -=item PerlOpenLogsHandler
  +  LoadModule perl_module modules/mod_perl.so
   
  -=item PerlPostConfigHandler
  +This setting specifies the location of the mod_perl module relative to
  +the C<ServerRoot> setting, therefore you should put it somewhere after
  +C<ServerRoot> is specified.
   
  -=item PerlPreConnectionHandler
  +If mod_perl has been statically linked it's automatically enabled.
   
  -=item PerlProcessConnectionHandler
   
  -=item PerlHeaderParserHandler
   
  -=item PerlAccessHandler
  +=head1 Perl's Command Line Switches
   
  -=item PerlAuthenHandler
  +Now you can pass any Perl's command line switches in I<httpd.conf>
  +using the C<PerlSwitches> directive. For example to enable warnings
  +and Taint checking add:
   
  -=item PerlAuthzHandler
  +  PerlSwitches -wT
   
  -=item PerlTypeHandler
  +As an alternative to using C<use lib> in I<startup.pl> to adjust
  +C<@INC>, now you can use the command line switch to do the same:
   
  -=item PerlFixupHandler
  +  PerlSwitches -Mlib=/home/stas/modperl
   
  -=item PerlOutputFilterHandler
   
  -=item PerlResponseHandler
   
  -=item PerlLogHandler
   
  -=item PerlPostReadRequestHandler
   
  -=item PerlInitHandler
  +=head1 PerlOptions Directive
   
  -=item PerlTransHandler
  +The directive C<PerlOptions> provides fine-grained configuration for
  +what were compile-time only options in the first mod_perl generation.
  +It also provides control over what class of C<PerlInterpreter> is used
  +for a C<E<lt>VirtualHostE<gt>> or location configured with
  +C<E<lt>LocationE<gt>>, C<E<lt>DirectoryE<gt>>, etc.
   
  -=back
  +Options are enabled by prepending C<+> and disabled with C<->. The
  +options include:
   
  -=head2 General directives
  +=head2 C<Enable>
   
  -=over 4
  +On by default, can be used to disable mod_perl for a given
  +C<VirtualHost>. For example:
   
  -=item PerlSwitches switches
  +  <VirtualHost ...>
  +      PerlOptions -Enable
  +  </VirtualHost>
   
  -pass switches to the Perl command line. For example, to enable
  -warnings:
  +=head2 C<Clone>
   
  -  PerlSwitches -w
  +Share the parent Perl interpreter, but give the C<VirtualHost> its own
  +interpreter pool. For example should you wish to fine tune interpreter
  +pools for a given virtual host:
   
  -=item PerlTrace [level]
  +  <VirtualHost ...>
  +      PerlOptions +Clone
  +      PerlInterpStart 2
  +      PerlInterpMax 2
  +  </VirtualHost>
   
  -set the trace level. This directive is enabled when mod_perl is compiled with
  -the MP_TRACE option. C<level> is either:
  +This might be worthwhile in the case where certain hosts have their
  +own sets of large-ish modules, used only in each host.  By tuning each 
  +host to have its own pool, that host will continue to reuse the Perl
  +allocations in their specific modules.
   
  -  all
  +When cloning a Perl interpreter, to inherit base Perl interpreter's
  +C<PerlSwitches> use:
   
  -which sets maximum logging and debugging levels;
  +  <VirtualHost ...>
  +      ...
  +      PerlSwitches +inherit
  +  </VirtualHost>
   
  -a combination of one or more option letters (or option numerical
  -equivalents) from the following list:
   
  -  d (  1) directive processing
  -  f (  2) filters
  -  g (  4) Perl runtime interaction
  -  h (  8) handlers
  -  i ( 16) interpreter pool management
  -  m ( 32) memory allocations
  -  s ( 64) perl sections
  -  t (128) benchmark-ish timings
  +=head2 C<Parent>
   
  -When C<level> is not specified, the tracing level will be set to the
  -value of the MOD_PERL_TRACE environment variable.
  +Create a new parent Perl interpreter for the given C<VirtualHost> and
  +give it its own interpreter pool (implies the C<Clone> option).
  +
  +A common problem with mod_perl 1.x was the shared namespace between
  +all code within the process.  Consider two developers using the same
  +server and each wants to run a different version of a module with the
  +same name.  This example will create two I<parent> Perl interpreters,
  +one for each C<E<lt>VirtualHostE<gt>>, each with its own namespace and
  +pointing to a different paths in C<@INC>:
  +
  +  <VirtualHost ...>
  +      ServerName dev1
  +      PerlOptions +Parent
  +      PerlSwitches -Mblib=/home/dev1/lib/perl
  +  </VirtualHost>
  +
  +  <VirtualHost ...>
  +      ServerName dev2
  +      PerlOptions +Parent
  +      PerlSwitches -Mblib=/home/dev2/lib/perl
  +  </VirtualHost>
  +
  +Or even for a given location, for something like "dirty" cgi scripts:
  +
  +  <Location /cgi-bin>
  +      PerlOptions +Parent
  +      PerlInterpMaxRequests 1
  +      PerlInterpStart 1
  +      PerlInterpMax 1
  +      PerlResponseHandler ModPerl::Registry
  +  </Location>
  +
  +will use a fresh interpreter with its own namespace to handle each
  +request.
  +
  +=head2 C<Perl*Handler>
  +
  +Disable C<Perl*Handlers>, all compiled in handlers are enabled by
  +default.
  +
  +Suppose one of the hosts does not want to allow users to configure
  +C<PerlAuthenHandler>, C<PerlAuthzHandler>, C<PerlAccessHandler> and
  +E<lt>PerlE<gt> sections:
  +
  +  <VirtualHost ...>
  +      PerlOptions -Authen -Authz -Access -Sections
  +  </VirtualHost>
  +
  +Or maybe everything but the response handler:
  +
  +  <VirtualHost ...>
  +      PerlOptions None +Response
  +  </VirtualHost>
  +
  +=head2 C<AutoLoad>
  +
  +Resolve C<Perl*Handlers> at startup time, which includes loading the
  +modules from disk if not already loaded.
  +
  +In mod_perl 1.x, configured C<Perl*Handlers> which are not a fully
  +qualified subroutine names are resolved at request time, loading the
  +handler module from disk if needed.  In mod_perl 2.0, configured
  +C<Perl*Handlers> are resolved at startup time.  By default, modules
  +are not auto-loaded during startup-time resolution.  It is possible to
  +enable this feature with:
  +
  +  PerlOptions +Autoload
  +
  +Consider this configuration:
  +
  +  PerlResponseHandler Apache::Magick
  +
  +In this case, C<Apache::Magick> is the package name, and the
  +subroutine name will default to I<handler>.  If the C<Apache::Magick>
  +module is not already loaded, C<PerlOptions +Autoload> will attempt to
  +pull it in at startup time. With this option enabled you don't have to
  +explicitly load the handler modules. For example you don't need to
  +add:
  +
  +  PerlModule Apache::Magick
  +
  +in our example.
  +
  +=head2 C<GlobalRequest>
  +
  +Setup the global C<request_rec> for use with C<Apache-E<gt>request>.
  +This setting is needed for example if you use C<CGI.pm> to process the
  +incoming request.
  +
  +=head2 C<ParseHeaders>
  +
  +Scan output for HTTP headers, same functionality as mod_perl 1.x's
  +C<PerlSendHeaders>, but more robust. This option is usually needs to
  +be enabled for registry scripts which send the HTTP header with:
  +
  +  print "Content-type: text/html\n\n";
  +
  +=head2 C<MergeHandlers>
  +
  +Turn on merging of C<Perl*Handler> arrays. For example with a setting:
  +
  +  PerlFixupHandler Apache::FixupA
  +  
  +  <Location /inside>
  +      PerlFixupHandler Apache::FixupB
  +  </Location>
   
  -=back
  +a request for I</inside> only runs C<Apache::FixupB> (1.x
  +behavior). But with this configuration:
   
  -=head2 Threaded mode directives
  +  PerlFixupHandler Apache::FixupA
  +  
  +  <Location /inside>
  +      PerlOptions +MergeHandlers
  +      PerlFixupHandler Apache::FixupB
  +  </Location>
   
  -These directives are enabled only in a threaded mod_perl+Apache combo.
  +a request for I</inside> will run both C<Apache::FixupA> and
  +C<Apache::FixupB> handlers.
   
  -=over 4
   
  -=item PerlInterpStart
   
  -Number of Perl interpreters to start
   
  -=item PerlInterpMax
   
  -Max number of running Perl interpreters
  +=head1 Handlers Directives
   
  -=item PerlInterpMaxSpare
  +META: need to add descriptions
   
  -Max number of spare Perl interpreters
  +=head2 PerlChildInitHandler
   
  -=item PerlInterpMinSpare
  +=head2 PerlOpenLogsHandler
   
  -Min number of spare Perl interpreters
  +=head2 PerlPostConfigHandler
   
  -=item PerlInterpMaxRequests
  +=head2 PerlPreConnectionHandler
   
  -Max number of requests per Perl interpreters
  +=head2 PerlProcessConnectionHandler
   
  -=item PerlInterpScope
  +=head2 PerlHeaderParserHandler
   
  -Scope for which selected interpreter should be held, one of:
  -I<request>, I<connection>, I<handler>, I<subrequest>.
  +=head2 PerlAccessHandler
   
  -The default is I<request>.
  +=head2 PerlAuthenHandler
   
  -=back
  +=head2 PerlAuthzHandler
   
  -=head2 PerlOptions Directive
  +=head2 PerlTypeHandler
   
  -Enable/Disable Options.  Options include:
  +=head2 PerlFixupHandler
   
  -=over 4
  +=head2 PerlResponseHandler
   
  -=item Parent
  +=head2 PerlLogHandler
   
  -Create a new parent Perl interpreter for the given VirtualHost and
  -give it its own interpreter pool (implies Clone).
  +=head2 PerlPostReadRequestHandler
   
  -=item Clone
  +=head2 PerlInitHandler
   
  -Share the parent Perl interpreter, but give the VirtualHost its own
  -interpreter pool.
  +=head2 PerlTransHandler
   
  -Use:
  +=head2 PerlOutputFilterHandler
   
  -  PerlSwitches +inherit
  +The mod_perl 2.0 interface to the Apache filtering API is much simpler
  +than the C API, hiding most of the details underneath.  Perl filters
  +are configured using the C<PerlOutputFilterHandler> directive. For
  +example:
   
  -to inherit base Perl interpreter's C<PerlSwitches>.
  +  PerlOutputFilterHandler Apache::ReverseFilter
   
  -=item Enable
  +This simply registers the filter, which can then be turned on using
  +the core C<AddOutputFilter> directive:
   
  -On by default, used to disable mod_perl for a given VirtualHost.
  +  <Location /filterme>
  +      AddOutputFilter Apache::ReverseFilter
  +  </Location>
   
  -=item Perl*Handler
  +The C<Apache::ReverseFilter> handler will now be called for anything
  +accessed in the I</filterme> URL space.  The C<AddOutputFilter>
  +directive takes any number of filters. For example, the configuration:
   
  -Disable Perl*Handlers, all compiled in handlers are enabled by default.
  +  AddOutputFilter INCLUDE Apache::ReverseFilter
   
  -=item AutoLoad
  +will first send the output to I<mod_include>, which will in turn pass
  +its output down to C<Apache::ReverseFilter>.
   
  -Resolve Perl*Handlers at startup time, includes loading the module
  -from disk if not already loaded.
   
  -=item GlobalRequest
   
  -Setup the global request_rec for use with Apache-E<gt>request
   
  -=item ParseHeaders
   
  -Scan output for HTTP headers, same functionality as 1.x's
  -PerlSendHeaders, but more robust.
   
  -=item MergeHandlers
   
  -Turn on merging of Perl*Handler arrays, example:
  +=head1 Threads Mode Specific Directives
   
  - PerlFixupHandler One::fixup
  +These directives are enabled only in a threaded mod_perl+Apache combo:
   
  - <Location /foo>
  -     PerlFixupHandler Another::fixup
  - </Location>
  +=head2 C<PerlInterpStart>
   
  -By default, a request for /foo only runs B<Another::fixup> (1.x behavior)
  -I<PerlOptions +MergeHandlers> (inside Location /foo) will run both
  -B<One::fixup> and B<Another::fixup>.
  +The number of intepreters to clone at startup time.
   
  -=back
  +=head2 C<PerlInterpMax>
   
  -Examples:
  +If all running interpreters are in use, mod_perl will clone new
  +interpreters to handle the request, up until this number of
  +interpreters is reached. when C<PerlInterpMax> is reached, mod_perl
  +will block (via COND_WAIT()) until one becomes available (signaled via
  +COND_SIGNAL()).
   
  - # disable mod_perl for this host
  - <VirtualHost ...>
  -     PerlOptions -Enable
  - </VirtualHost>
  +=head2 C<PerlInterpMinSpare>
   
  - # create 2 Parent Perls,
  - # each pointing to a different developer library tree
  - <VirtualHost ...>
  -     ServerName dev1
  -     PerlOptions +Parent
  -     PerlSwitches -Mblib=/home/dev1/lib/perl
  - </VirtualHost>
  +The minimum number of available interpreters this parameter will clone
  +interpreters up to C<PerlInterpMax>, before a request comes in.
   
  - <VirtualHost ...>
  -     ServerName dev2
  -     PerlOptions +Parent
  -     PerlSwitches -Mblib=/home/dev2/lib/perl
  - </VirtualHost>
  +=head2 C<PerlInterpMaxSpare>
   
  - # give VirtualHost its own interpreter pool
  - <VirtualHost ...>
  -     PerlOptions +Clone
  -     PerlInterpStart 2
  -     PerlInterpMax 2
  - </VirtualHost>
  +mod_perl will throttle down the number of interpreters to this number
  +as those in use become available.
   
  - # disable handlers
  - <VirtualHost ...>
  -     PerlOptions -Authen -Authz -Access
  - </VirtualHost>
  +=head2 C<PerlInterpMaxRequests>
  +
  +The maximum number of requests an interpreter should serve, the
  +interpreter is destroyed when the number is reached and replaced with
  +a fresh clone.
  +
  +=head2 C<PerlInterpScope>
  +
  +As mentioned, when a request in a threaded mpm is handled by mod_perl,
  +an interpreter must be pulled from the interpreter pool.  The
  +interpreter is then only available to the thread that selected it,
  +until it is released back into the interpreter pool.  By default, an
  +interpreter will be held for the lifetime of the request, equivalent
  +to this configuration:
  +
  +  PerlInterpScope request
  +
  +For example, if a C<PerlAccessHandler> is configured, an interpreter
  +will be selected before it is run and not released until after the
  +logging phase.
  +
  +Intepreters will be shared across subrequests by default, however, it
  +is possible to configure the intepreter scope to be per-subrequest on
  +a per-directory basis:
  +
  +  PerlInterpScope subrequest
  +
  +With this configuration, an autoindex generated page, for example,
  +would select an interpreter for each item in the listing that is
  +configured with a Perl*Handler.
  +
  +It is also possible to configure the scope to be per-handler:
  +
  +  PerlInterpScope handler
  +
  +With this configuration, an interpreter will be selected before
  +C<PerlAccessHandlers> are run, and putback immediately afterwards,
  +before Apache moves onto the authentication phase.  If a
  +C<PerlFixupHandler> is configured further down the chain, another
  +interpreter will be selected and again putback afterwards, before
  +C<PerlResponseHandler> is run.
  +
  +For protocol handlers, the interpreter is held for the lifetime of the
  +connection.  However, a C protocol module might hook into mod_perl
  +(e.g. mod_ftp) and provide a C<request_rec> record.  In this case, the
  +default scope is that of the request.  Should a mod_perl handler want
  +to maintain state for the lifetime of an ftp connection, it is
  +possible to do so on a per-virtualhost basis:
  +
  +  PerlInterpScope connection
   
   
   
  @@ -221,15 +368,46 @@
   
   =head1 Retrieving Server Startup Options
   
  -The httpd server startup options can retrieved using
  -C<Apache::exists_config_define()>. For example this checks whether the
  -server has been started in a single mode:
  +The httpd server startup options can be retrieved using
  +C<Apache::exists_config_define()>. For example to check whether the
  +server has been started in a single mode use:
   
     if (Apache::exists_config_define("ONE_PROCESS")) {
         print "Running in a single mode";
     }
   
   
  +
  +=head1 Debug Directives
  +
  +=head2 C<PerlTrace [level]>
  +
  +set the trace level. This directive is enabled when mod_perl is
  +compiled with the MP_TRACE option. C<level> is either:
  +
  +  all
  +
  +which sets maximum logging and debugging levels;
  +
  +a combination of one or more option letters (or option numerical
  +equivalents) from the following list:
  +
  +  d (  1) directive processing
  +  f (  2) filters
  +  g (  4) Perl runtime interaction
  +  h (  8) handlers
  +  i ( 16) interpreter pool management
  +  m ( 32) memory allocations
  +  s ( 64) perl sections
  +  t (128) benchmark-ish timings
  +
  +When C<level> is not specified, the tracing level will be set to the
  +value of the MOD_PERL_TRACE environment variable.
  +
  +
  +
  +
  +
   =head1 Maintainers
   
   Maintainer is the person(s) you should contact with updates,
  @@ -240,6 +418,10 @@
   =item *
   
   Doug MacEachern E<lt>dougm (at) covalent.netE<gt>
  +
  +=item *
  +
  +Stas Bekman E<lt>stas (at) stason.orgE<gt>
   
   =back
   
  
  
  
  1.8       +47 -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.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- design.pod        21 May 2002 16:26:43 -0000      1.7
  +++ design.pod        22 May 2002 12:13:44 -0000      1.8
  @@ -93,7 +93,7 @@
   =item PerlInterpMinSpare
   
   The minimum number of available interpreters this parameter will clone
  -interpreters up to PerlInterpMax, before a request comes in.
  +interpreters up to C<PerlInterpMax>, before a request comes in.
   
   =item PerlInterpMaxSpare
   
  @@ -105,6 +105,52 @@
   The maximum number of requests an interpreter should serve, the
   interpreter is destroyed when the number is reached and replaced with
   a fresh one.
  +
  +=item PerlInterpScope
  +
  +As mentioned, when a request in a threaded mpm is handled by mod_perl,
  +an interpreter must be pulled from the interpreter pool.  The
  +interpreter is then only available to the thread that selected it,
  +until it is released back into the interpreter pool.  By default, an
  +interpreter will be held for the lifetime of the request, equivalent
  +to this configuration:
  +
  +  PerlInterpScope request
  +
  +For example, if a C<PerlAccessHandler> is configured, an interpreter
  +will be selected before it is run and not released until after the
  +logging phase.
  +
  +Intepreters will be shared across subrequests by default, however, it
  +is possible to configure the intepreter scope to be per-subrequest on
  +a per-directory basis:
  +
  +  PerlInterpScope subrequest
  +
  +With this configuration, an autoindex generated page for example would
  +select an interpreter for each item in the listing that is configured
  +with a Perl*Handler.
  +
  +It is also possible to configure the scope to be per-handler:
  +
  +  PerlInterpScope handler
  +
  +With this configuration, an interpreter will be selected before
  +C<PerlAccessHandlers> are run, and putback immediately afterwards,
  +before Apache moves onto the authentication phase.  If a
  +C<PerlFixupHandler> is configured further down the chain, another
  +interpreter will be selected and again putback afterwards, before
  +C<PerlResponseHandler> is run.
  +
  +For protocol handlers, the interpreter is held for the lifetime of the
  +connection.  However, a C protocol module might hook into mod_perl
  +(e.g. mod_ftp) and provide a C<request_rec> record.  In this case, the
  +default scope is that of the request.  Should a mod_perl handler want
  +to maintain state for the lifetime of an ftp connection, it is
  +possible to do so on a per-virtualhost basis:
  +
  +  PerlInterpScope connection
  +
   
   =back
   
  
  
  
  1.7       +17 -17    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.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- overview.pod      21 May 2002 16:26:44 -0000      1.6
  +++ overview.pod      22 May 2002 12:13:44 -0000      1.7
  @@ -330,37 +330,37 @@
   
     PerlInterpScope request
   
  -For example, if a PerlAccessHandler is configured, an interpreter will
  -be selected before it is run and not released until after the logging
  -phase.
  +For example, if a C<PerlAccessHandler> is configured, an interpreter
  +will be selected before it is run and not released until after the
  +logging phase.
   
   Intepreters will be shared across subrequests by default, however, it
  -is possible configure the intepreter scope to be per-subrequest on
  +is possible to configure the intepreter scope to be per-subrequest on
   a per-directory basis:
   
     PerlInterpScope subrequest
   
  -With this configuration, an autoindex generated page for example would 
  +With this configuration, an autoindex generated page for example would
   select an interpreter for each item in the listing that is configured
  -with a Perl*Handler.
  +with a C<Perl*Handler>.
   
   It is also possible to configure the scope to be per-handler:
   
     PerlInterpScope handler
   
   With this configuration, an interpreter will be selected before
  -PerlAccessHandlers are run, and putback immediately afterwards, before
  -Apache moves onto the authentication phase.  If a PerlFixupHandler is
  -configured further down the chain, another interpreter will be
  -selected and again putback afterwards, before PerlResponseHandler is
  -run.
  +C<PerlAccessHandlers> are run, and putback immediately afterwards,
  +before Apache moves onto the authentication phase.  If a
  +C<PerlFixupHandler> is configured further down the chain, another
  +interpreter will be selected and again putback afterwards, before
  +C<PerlResponseHandler> is run.
   
   For protocol handlers, the interpreter is held for the lifetime of the
   connection.  However, a C protocol module might hook into mod_perl
  -(e.g. mod_ftp) and provide a request_rec.  In this case, the default
  -scope is that of the request.  Should a mod_perl handler want to
  -maintain state for the lifetime of an ftp connection, it is possible
  -to do so on a per-virtualhost basis:
  +(e.g. mod_ftp) and provide a C<request_rec> record.  In this case, the
  +default scope is that of the request.  Should a mod_perl handler want
  +to maintain state for the lifetime of an ftp connection, it is
  +possible to do so on a per-virtualhost basis:
   
     PerlInterpScope connection
   
  @@ -735,9 +735,9 @@
   
   The mod_perl-2.0 interface to the Apache filter API is much simpler
   than the C API, hiding most of the details underneath.  Perl filters
  -are configured using the C<PerlFilterHandler> directive, for example:
  +are configured using the C<PerlOutputFilterHandler> directive, for example:
   
  -  PerlFilterHandler Apache::ReverseFilter
  +  PerlOutputFilterHandler Apache::ReverseFilter
   
   This simply registers the filter, which can then be turned on using
   the core C<AddOutputFilter> directive:
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to