Hi,

I am new to mod_perl and am having problems seeing the
changes made to library files.  Must I restart the server every
time I change a library file in order to see my changes?  My
test code and environment is below.


z.pl - test script which calls entry_point in z_lib.pl
-------------------------------------------------------
#!/usr/local/bin/perl
use strict;

require '/home/cgi-bin/z_lib.pl';

&entry_point();
-------------------------------------------------------


z_lib.pl
----------------------
#!/usr/local/bin/perl
use strict;

sub entry_point {

    my $r = Apache->request;
    $r->content_type('text/html');
    $r->send_http_header;

    print "HERE 1";
    #print "  HERE 2";

}

1;
------------------


My Test Procedure:

1.)  Start server (w/ -X option)
2.)  Run z.pl via browser - output is "HERE 1"
3.)  Uncomment out second print statement in z_lib.pl
4.)  Reload z.pl via browser - output is "HERE 1"
     I would expect it to display the output of
     the second print statement, but it does not.
5.)  Re-start server
6.)  Run z.pl via browser - output is "HERE 1  HERE 2"


If I deliberately put an error in z_lib.pl and reload z.pl, I receive
an error message.  So, it appears that the library file z_lib.pl is
getting reloaded.  But why don't my changes show up?  Also,
here is the output in the error_log that displays Apache::StatINC
messages

Apache::StatINC: process 21891 reloading /home/cgi-bin/z_lib.pl.
Apache::StatINC::handler('Apache=SCALAR(0x211220)') called at /dev/null
line 0  eval {...} called at /dev/null line 0


I have extended @INC by using "use lib .." in the startup file.  I
have read through the mod_perl guide at http://apache.perl.org/, but
am unable to resolve this problem.  Should I replace the 'require's
with 'do's in development and then switch back to requires when
moving to production?


My Environment:
perl version:  5.6.1
mod_perl version:  1.26
apache version:  1.3.24
OS:  Solaris 2.8



from httpd.conf
----------------
PerlWarn On
PerlModule Apache::StatINC
PerlRequire /httpd/conf/startup.pl

Alias /cgi-bin/ /home/cgi-bin/

PerlModule Apache::Registry
<Location /cgi-bin>
    SetHandler  perl-script
    PerlHandler Apache::Registry
    Options     +ExecCGI
    allow from all
    PerlSendHeader On
    PerlInitHandler Apache::StatINC
    PerlSetVar StatINC_Debug 1
</Location>
----------------



startup.pl
---------------
use strict;

# Extend @INC if needed
use lib qw(/home/cgi-bin);

# Make sure we are in a sane environment.
$ENV{MOD_PERL} or die "not running under mod_perl!";

# Don't include the name of the virtual host in the package name
$Apache::Registry::NameWithVirtualHost = 0;

# Load Perl modules of your choice here
# This code is interpreted *once* when the server starts
use Apache::DBI ();
use DBI ();

# Tell me more about warnings
use Carp ();
$SIG{__WARN__} = \&Carp::cluck;

1;
---------------



Thanks for any help you can provide,

Ted

Reply via email to