You are viewing a plain text version of this content. The canonical link for it is here.
Posted to docs-cvs@perl.apache.org by st...@apache.org on 2005/02/19 07:30:30 UTC

svn commit: r154397 - in perl/modperl/docs/trunk/src/docs/2.0/user: coding/coding.pod config/config.pod config/custom.pod handlers/server.pod

Author: stas
Date: Fri Feb 18 22:30:28 2005
New Revision: 154397

URL: http://svn.apache.org/viewcvs?view=rev&rev=154397
Log:
extend and re-organise Perl*Require options and the startup process

Modified:
    perl/modperl/docs/trunk/src/docs/2.0/user/coding/coding.pod
    perl/modperl/docs/trunk/src/docs/2.0/user/config/config.pod
    perl/modperl/docs/trunk/src/docs/2.0/user/config/custom.pod
    perl/modperl/docs/trunk/src/docs/2.0/user/handlers/server.pod

Modified: perl/modperl/docs/trunk/src/docs/2.0/user/coding/coding.pod
URL: http://svn.apache.org/viewcvs/perl/modperl/docs/trunk/src/docs/2.0/user/coding/coding.pod?view=diff&r1=154396&r2=154397
==============================================================================
--- perl/modperl/docs/trunk/src/docs/2.0/user/coding/coding.pod (original)
+++ perl/modperl/docs/trunk/src/docs/2.0/user/coding/coding.pod Fri Feb 18 22:30:28 2005
@@ -71,7 +71,7 @@
 C<L<server_shutdown_cleanup_register()|docs::2.0::api::Apache::ServerUtil/C_server_shutdown_cleanup_register_>>
 in F<startup.pl>:
 
-  #PerlRequire startup.pl
+  #PerlPostConfigRequire startup.pl
   use Apache::ServerUtil ();
   use APR::Pool ();
   

Modified: perl/modperl/docs/trunk/src/docs/2.0/user/config/config.pod
URL: http://svn.apache.org/viewcvs/perl/modperl/docs/trunk/src/docs/2.0/user/config/config.pod?view=diff&r1=154396&r2=154397
==============================================================================
--- perl/modperl/docs/trunk/src/docs/2.0/user/config/config.pod (original)
+++ perl/modperl/docs/trunk/src/docs/2.0/user/config/config.pod Fri Feb 18 22:30:28 2005
@@ -63,7 +63,11 @@
 
   use Apache2 ();
 
-in the startup file. Only if you don't use a startup file you can add:
+in the
+L<startup|docs::2.0::user::handlers::server/Startup_specific_Coding>
+file.
+
+Only if you don't use a startup file you can add:
 
   PerlModule Apache2
 
@@ -71,115 +75,6 @@
 C<PerlModule> directives are processed.
 
 
-=head1 Startup Process
-
-As explained in the L<Server Life
-Cycle|docs::2.0::user::handlers::server> chapter, normally Apache
-runs the server configuration phase, followed by
-C<L<PerlOpenLogsHandler|docs::2.0::user::handlers::server/C_PerlOpenLogsHandler_>>
-and
-C<L<PerlPostConfigHandler|docs::2.0::user::handlers::server/C_PerlPostConfigHandler_>>
-phases, then immediately restarts itself. Therefore everything running
-at the server startup is executed twice. During the restart, Perl is
-completely destroyed and started again.
-
-If Apache is started as C<'httpd -t'> (equivalent to C<'apachectl
-configtest'>) or as C<'httpd -S'>, it will run only the configuration
-phase and exit. mod_perl 2.0 postpones the startup of Perl until after
-the configuration phase is over, to allow the usage of the
-C<L<PerlSwitches|/C_PerlSwitches_>> directive, which can't be used
-after Perl is started.  mod_perl starts Perl and runs any registered
-C<L<PerlRequire|/C_PerlRequire_>> and C<L<PerlModule|/C_PerlModule_>>
-entries as the very first thing during the
-C<L<PerlOpenLogsHandler|docs::2.0::user::handlers::server/C_PerlOpenLogsHandler_>>
-phase, which is not invoked during the C<'apachectl configtest'>
-execution.
-
-There are two cases when mod_perl 2.0 is forced to start early (during
-the configuration phase). First, is when
-C<L<PerlLoadModule|/C_PerlLoadModule_>> is used and second is when a
-C<L<E<lt>PerlE<gt> section|docs::2.0::api::Apache::PerlSections>> is
-encountered, both requiring a running Perl, and therefore triggering
-an early server startup.
-
-Therefore at the moment, if you want to trigger an early Perl startup,
-just add an empty C<L<E<lt>PerlE<gt>
-section|docs::2.0::api::Apache::PerlSections>> in F<httpd.conf>:
-
-  <Perl>
-  # trigger an early Perl startup
-  </Perl>
-
-right after loading the mod_perl module, if you are using DSO, or just
-before your mod_perl configuration section, if you're using a static
-mod_perl build.
-
-
-
-
-
-
-=head1 Startup File
-
-A startup file with Perl code to be executed at the server startup can
-be loaded using C<L<PerlRequire|/C_PerlRequire_>>. For example:
-
-  PerlRequire /home/httpd/perl/lib/startup.pl
-
-It's used to adjust Perl modules search paths in C<@INC>, pre-load
-commonly used modules, pre-compile constants, etc. Here is a typical
-I<startup.pl> for mod_perl 2.0:
-
-  file:startup.pl
-  ---------------
-  use Apache2 ();
-  
-  use lib qw(/home/httpd/perl);
-  
-  # enable if the mod_perl 1.0 compatibility is needed
-  # use Apache::compat ();
-  
-  # preload all mp2 modules
-  # use ModPerl::MethodLookup;
-  # ModPerl::MethodLookup::preload_all_modules();
-  
-  use ModPerl::Util (); #for CORE::GLOBAL::exit
-  
-  use Apache::RequestRec ();
-  use Apache::RequestIO ();
-  use Apache::RequestUtil ();
-  
-  use Apache::ServerRec ();
-  use Apache::ServerUtil ();
-  use Apache::Connection ();
-  use Apache::Log ();
-  
-  use APR::Table ();
-  
-  use ModPerl::Registry ();
-  
-  use Apache::Const -compile => ':common';
-  use APR::Const -compile => ':common';
-  
-  1;
-
-In this file the C<Apache2> modules is loaded, so L<the 2.0 modules
-will be found|/Accessing_the_mod_perl_2_0_Modules>. Afterwards C<@INC>
-in adjusted to include non-standard directories with Perl modules:
-
-  use lib qw(/home/httpd/perl);
-
-If you need to use the backwards compatibility layer load:
-
-  use Apache::compat ();
-
-Next we preload the commonly used mod_perl 2.0 modules and precompile
-common constants.
-
-Finally as usual the I<startup.pl> file must be terminated with C<1;>.
-
-
-
 
 
 
@@ -254,7 +149,7 @@
 
 =head2 C<PerlAddVar>
 
-  META: to be written
+META: to be written
 
 
 
@@ -264,21 +159,23 @@
 
 =head2 C<PerlConfigRequire>
 
-  PerlConfigRequire Foo/Bar.pm
-
-is equivalent to Perl's:
-
-  require "Foo/Bar.pm";
-
-C<PerlConfigRequire> is used to load files with Perl code.
-
-It is very similar to C<L<PerlRequire|/C_PerlRequire_>>
-with the only difference being that Perl startup is not
-L<delayed|/Startup_Process> and will be immediately started
-upon encountering this directive.
-
-META: need to expand on this with examples and suggested usages
-
+C<PerlConfigRequire> does the same thing as
+C<L<PerlPostConfigRequire|/C_PerlPostConfigRequire_>>, but it is
+executed as soon as it is encountered, i.e. during the configuration
+phase.
+
+You should be using this directive to load only files that introduce
+new configuration directives, used later in the configuration
+file. For any other purposes (like preloading modules) use
+C<L<PerlPostConfigRequire|/C_PerlPostConfigRequire_>>.
+
+One of the reasons for avoding using the C<PerlConfigRequire>
+directive, is that the C<STDERR> stream is not available during the
+restart phase, therefore the errors will be not reported. It is not a
+bug in mod_perl but an Apache limitation. Use
+C<L<PerlPostConfigRequire|/C_PerlPostConfigRequire_>> if you can, and
+there you have the C<STDERR> stream sent to the error_log file (by
+default).
 
 
 
@@ -290,12 +187,12 @@
 
 The C<PerlLoadModule> directive is similar to
 C<L<PerlModule|/C_PerlModule_>>, in a sense that it loads a
-module. The difference is that it's used to triggers
-L<an early Perl startup|/Startup_Process>. This can be usefull
-for modules that need to be loaded early, as is the case for
-modules that implement
-L<new Apache directives|docs::2.0::user::config::custom>,
-which are needed during the configuration phase.
+module. The difference is that it's used to triggers L<an early Perl
+startup|docs::2.0::user::handlers::server/mod_perl_Startup>. This can
+be usefull for modules that need to be loaded early, as is the case
+for modules that implement L<new Apache
+directives|docs::2.0::user::config::custom>, which are needed during
+the configuration phase.
 
 
 
@@ -316,8 +213,9 @@
 
     PerlModule Apache::DBI CGI DBD::Mysql
 
-Notice, that normally, the Perl startup is L<delayed|/Startup_Process>
-until after the configuration phase.
+Notice, that normally, the Perl startup is
+L<delayed|docs::2.0::user::handlers::server/mod_perl_Startup> until
+after the configuration phase.
 
 See also: C<L<PerlRequire|/C_PerlRequire_>>.
 
@@ -674,64 +572,57 @@
 
 =head2 C<PerlPostConfigRequire>
 
-  PerlPostConfigRequire Foo/Bar.pm
+  PerlPostConfigRequire /home/httpd/perl/lib/startup.pl
 
 is equivalent to Perl's:
 
-  require "Foo/Bar.pm";
-
-C<PerlPostConfigRequire> is used to load files with Perl code
-as late as possible during server startup.
-
-It is very similar to C<L<PerlRequire|/C_PerlRequire_>> and 
-C<L<PerlConfigRequire|/C_PerlConfigRequire_>>.
-
-C<PerlPostConfigRequire> delays loading of the file until
-the last possible moment before the server is starting, in
-the post_config phase.
-
-META: need to expand on this with examples and suggested usages
-
-
-
-
+  require "/home/httpd/perl/lib/startup.pl";
 
+A C<PerlRequire> filename argument can be absolute or relative to
+C<ServerRoot> or a filepath in Perl's C<@INC>.
 
+You can pass one or more filenames as arguments to
+C<PerlPostConfigRequire>:
 
+    PerlPostConfigRequire path1/startup.pl path2/startup.pl
 
-=head2 C<PerlRequire>
-
-  PerlRequire Foo/Bar.pm
-
-is equivalent to Perl's:
-
-  require "Foo/Bar.pm";
+C<PerlPostConfigRequire> is used to load files with Perl code to be
+run at the server startup. It's not executed as soon as it is
+encountered, but L<as late as
+possible|docs::2.0::user::handlers::server/When_Does_perl_Start_To_Run>
+during the server startup.
+
+Most of the time you should be using this directive. For example to
+preload some modules or run things at the server startup). Only if you
+need to load modules that introduce new configuration directives, used
+later in the configuration file you should use
+C<L<PerlConfigRequire|/C_PerlConfigRequire_>>.
 
-C<PerlRequire> is used to load files with Perl code.
+As with any file with Perl code that gets C<use()>'d or
+C<require()>'d, it must return a I<true> value.  To ensure that this
+happens don't forget to add C<1;> at the end of
+F<L<startup.pl|docs::2.0::user::handlers::server/Startup_File>>.
 
-Most commonly C<PerlRequire> is used to load
-F<L<startup.pl|/Startup_File>>, containing Perl code to be run at the
-server startup. For example:
 
-    PerlRequire  /home/httpd/perl/lib/startup.pl
+See also: C<L<PerlModule|/C_PerlModule_>> and
+C<L<PerlLoadModule|/C_PerlLoadModule_>>.
 
-A C<PerlRequire> filename argument can be absolute or relative to
-C<ServerRoot> or a filepath in Perl's C<@INC>.
 
-As with any file with Perl code that gets C<use()>'d or
-C<require()>'d, it must return a I<true> value.  To ensure that this
-happens don't forget to add C<1;> at the end of
-F<L<startup.pl|/Startup_File>>.
 
-You can pass one or more filenames as arguments to C<PerlRequire>:
 
-    PerlRequire path1/startup.pl path2/startup.pl
 
-Notice that normally, the Perl startup is L<delayed|/Startup_Process>
-until after the configuration phase.
 
-See also: C<L<PerlModule|/C_PerlModule_>>.
+=head2 C<PerlRequire>
 
+C<PerlRequire> does the same thing as
+C<L<PerlPostConfigRequire|/C_PerlPostConfigRequire_>>, but you have
+almost no control of L<when this code is going to be
+executed|docs::2.0::user::handlers::server/When_Does_perl_Start_To_Run>.
+Therefore you should be using either
+C<L<PerlConfigRequire|/C_PerlConfigRequire_>> (executes immediately)
+or C<L<PerlPostConfigRequire|/C_PerlPostConfigRequire_>> (executes
+just before the end of the server startup) instead. Most of the time
+you want to use the latter.
 
 
 
@@ -1544,8 +1435,8 @@
 
 =item * I<startup.pl>
 
-In L<the startup file|/Startup_File> you can use the C<lib> pragma
-like so:
+In L<the startup file|docs::2.0::user::handlers::server/Startup_File>
+you can use the C<lib> pragma like so:
 
   use lib qw(/home/httpd/project1/lib /tmp/lib);
   use lib qw(/home/httpd/project2/lib);

Modified: perl/modperl/docs/trunk/src/docs/2.0/user/config/custom.pod
URL: http://svn.apache.org/viewcvs/perl/modperl/docs/trunk/src/docs/2.0/user/config/custom.pod?view=diff&r1=154396&r2=154397
==============================================================================
--- perl/modperl/docs/trunk/src/docs/2.0/user/config/custom.pod (original)
+++ perl/modperl/docs/trunk/src/docs/2.0/user/config/custom.pod Fri Feb 18 22:30:28 2005
@@ -57,13 +57,13 @@
 C<L<E<lt>PerlE<gt>
 Sections|docs::2.0::user::config::config/C_E_lt_PerlE_gt___Sections>>
 or L<a startup
-file|docs::2.0::user::config::config/Startup_File>, 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.
+file|docs::2.0::user::handlers::server/Startup_File>, 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
 

Modified: perl/modperl/docs/trunk/src/docs/2.0/user/handlers/server.pod
URL: http://svn.apache.org/viewcvs/perl/modperl/docs/trunk/src/docs/2.0/user/handlers/server.pod?view=diff&r1=154396&r2=154397
==============================================================================
--- perl/modperl/docs/trunk/src/docs/2.0/user/handlers/server.pod (original)
+++ perl/modperl/docs/trunk/src/docs/2.0/user/handlers/server.pod Fri Feb 18 22:30:28 2005
@@ -432,8 +432,7 @@
 
 
 
-
-=head1 Startup Apache Commands
+=head1 Apache Command-line Commands
 
 Some notes on how Apache start/restart Apache commands affect
 mod_perl.
@@ -486,6 +485,175 @@
 here, due to the C<SIGTERM> signal.
 
 =back
+
+
+
+
+
+
+=head1 mod_perl Startup
+
+The following sections discuss the specifics of the mod_perl startup.
+
+
+
+=head2 Start Immediately Restarts
+
+As explained in the L<Server Life Cycle
+section|docs::2.0::user::handlers::server>, on start Apache normally
+runs the server configuration phase, followed by
+C<L<PerlOpenLogsHandler|docs::2.0::user::handlers::server/C_PerlOpenLogsHandler_>>
+and
+C<L<PerlPostConfigHandler|docs::2.0::user::handlers::server/C_PerlPostConfigHandler_>>
+phases, then immediately restarts itself. Therefore everything running
+at the server startup is executed twice. During the restart, Perl is
+completely destroyed and started again.
+
+
+
+
+
+=head2 When Does perl Start To Run
+
+If Apache is started as C<'httpd -t'> (equivalent to C<'apachectl
+configtest'>) or as C<'httpd -S'>, it will run only the configuration
+phase and exit. Depending on your configuration file, it may or may
+not start perl. See the details below.
+
+During the normal startup, mod_perl 2.0 postpones the startup of perl
+until after the configuration phase is over, to allow the usage of the
+C<L<PerlSwitches|docs::2.0::user::config::config/C_PerlSwitches_>>
+directive, which can't be used after Perl is started.
+
+After the configuration phase is over, as the very first thing during
+the C<L<post_config
+phase|docs::2.0::user::handlers::server/C_PerlOpenLogsHandler_>>,
+mod_perl starts perl and runs any registered
+C<L<PerlRequire|docs::2.0::user::config::config/C_PerlRequire_>> and
+C<L<PerlModule|docs::2.0::user::config::config/C_PerlModule_>>
+entries.
+
+At the very end of the C<L<post_config
+phase|docs::2.0::user::handlers::server/C_PerlPostConfigHandler_>> any
+registrered
+C<L<PerlPostConfigRequire|docs::2.0::user::config::config/C_PerlPostConfigRequire_>>
+entries are run.
+
+When any of the following configuration directives is encountered
+(during the configuration phase) mod_perl 2.0 is forced to start as
+soon as they are encountered (as these options require a running
+perl):
+
+=over
+
+=item *
+
+C<L<PerlLoadModule|docs::2.0::user::config::config/C_PerlLoadModule_>>
+
+=item *
+
+C<L<E<lt>PerlE<gt> section|docs::2.0::api::Apache::PerlSections>>
+
+=item *
+
+C<L<PerlConfigRequire|docs::2.0::user::config::config/C_PerlConfigRequire_>>
+
+=back
+
+Therefore if you want to trigger an early Perl startup, you could add
+an empty C<L<E<lt>PerlE<gt>
+section|docs::2.0::api::Apache::PerlSections>> in F<httpd.conf>:
+
+  <Perl>
+  # trigger an early Perl startup
+  </Perl>
+
+right after loading the mod_perl module, if you are using DSO, or just
+before your mod_perl configuration section, if you're using a static
+mod_perl build. But most likely you want to use the
+C<L<PerlConfigRequire|docs::2.0::user::config::config/C_PerlConfigRequire_>>
+instead.
+
+
+
+
+=head2 Startup File
+
+A startup file with Perl code to be executed at the server startup can
+be loaded using
+C<L<PerlPostConfigRequire|docs::2.0::user::config::config/C_PerlPostConfigRequire_>>. For
+example:
+
+  PerlPostConfigRequire /home/httpd/perl/lib/startup.pl
+
+It's used to adjust Perl modules search paths in C<@INC>, pre-load
+commonly used modules, pre-compile constants, etc. Here is a typical
+I<startup.pl> for mod_perl 2.0:
+
+  file:startup.pl
+  ---------------
+  use Apache2 ();
+  
+  use lib qw(/home/httpd/perl);
+  
+  # enable if the mod_perl 1.0 compatibility is needed
+  # use Apache::compat ();
+  
+  # preload all mp2 modules
+  # use ModPerl::MethodLookup;
+  # ModPerl::MethodLookup::preload_all_modules();
+  
+  use ModPerl::Util (); #for CORE::GLOBAL::exit
+  
+  use Apache::RequestRec ();
+  use Apache::RequestIO ();
+  use Apache::RequestUtil ();
+  
+  use Apache::ServerRec ();
+  use Apache::ServerUtil ();
+  use Apache::Connection ();
+  use Apache::Log ();
+  
+  use APR::Table ();
+  
+  use ModPerl::Registry ();
+  
+  use Apache::Const -compile => ':common';
+  use APR::Const -compile => ':common';
+  
+  1;
+
+In this file the C<Apache2> modules is loaded, so L<the 2.0 modules
+will be
+found|docs::2.0::user::config::config/Accessing_the_mod_perl_2_0_Modules>. Afterwards
+C<@INC> in adjusted to include non-standard directories with Perl
+modules:
+
+  use lib qw(/home/httpd/perl);
+
+If you need to use the backwards compatibility layer load:
+
+  use Apache::compat ();
+
+Next we preload the commonly used mod_perl 2.0 modules and precompile
+common constants.
+
+Finally as usual the I<startup.pl> file must be terminated with C<1;>.
+
+
+
+
+
+
+
+=head2 Dealing with Restarts
+
+META: to be written, talk about Apache::ServerUtil::restart_count();
+see t/conf/post_config_startup.pl
+
+
+
+
 
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: docs-cvs-unsubscribe@perl.apache.org
For additional commands, e-mail: docs-cvs-help@perl.apache.org