Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

mod_perl caching

by e_macks (Novice)
on Apr 02, 2003 at 08:12 UTC ( #247432=perlquestion: print w/replies, xml ) Need Help??
e_macks has asked for the wisdom of the Perl Monks concerning the following question:

Monks,

Iím developing Perl on a web server that already has mod_perl installed. When I change code inside a .pm module, the old version of the module is still cached, and my changes sometimes donít show up for days. This makes development very difficult to say the least!

How can I temporarily turn off this caching while I develop?

Thanks.

Replies are listed 'Best First'.
Re: mod_perl caching
by grantm (Parson) on Apr 02, 2003 at 08:26 UTC

    Check out the Apache::Reload module. It allows code in your .pm files to be recompiled automatically when a change to the file is detected - essential for development.

    Update: When I do need to do a graceful restart on the Apache server (eg: to pick up changes to the config file) I tend not to use apachectl directly. If there is a bug in your code or config, it won't be detected until the server tries (and fails) to restart. This leaves you with two problems: the server is down and you have broken code which must be fixed before the server will start. Pressure!

    A safer option is to use a custom script which first does a syntax check of you httpd.conf and any Perl modules it loads. If that succeeds that it's safe to call apachctl. Here's the relevant part of my initserver script:

    #!/bin/sh SERVER="/usr/sbin/httpd" CONFIG="/etc/httpd/conf/httpd.conf" ARGS=`/bin/ls /usr/lib/apache | perl -nle 'm{^(?:mod_|lib)(.*?)(\.so)? +$} && print uc("-DHAVE_$1")'` if ! $SERVER -T $ARGS -f $CONFIG then echo "Server not restarted due to errors in config file" exit 1 fi apachectl graceful

    The ARGS=... line adds command line arguments like -DHAVE_PERL, -DHAVE_REWRITE etc for all the modules which are loaded dynamically. You may or may not need that.

      more specifically (from a development site on my own web server): in the httpd.conf file, inside of a container (either <Location>, <Directory>, or <VirtualHost>) add these lines:

      PerlModule Apache::Reload PerlInitHandler Apache::Reload PerlSetVar ReloadAll Off PerlSetVar ReloadTouchFile /tmp/reload.modules
      the way it works is this: the first time each module is loaded (or if the module is already in memory, used) mod_perl will check the date/time of the given file. if it has changed since the last time it was parsed, the parsed code in memory will be unloaded and the code will be re-parsed from the disk.

      the problem is that doing this check for every module, for every request, causes a signifigant slowdown on a busy server.

      setting "ReloadAll Off" turns off the global checking, and the check will only be done for modules which contain the line "use Apache::Reload" in their code.

      note that this also works for authentication handlers, in addition to standard content-generation handlers. my guess is that it will work with all handlers, regardless of the request phase they handle, but i've only used it with these two types.

Re: mod_perl caching
by IlyaM (Parson) on Apr 02, 2003 at 10:17 UTC
Re: mod_perl caching
by Tomte (Priest) on Apr 02, 2003 at 08:17 UTC

    If you are in charge of the Server: Surely kind of brute force, but working without interfering with the usage of the server:

    host:~ # apachectl graceful

    should do the trick.

    regards,
    tomte


    Update: This obviously doesn't turn off caching, but executed whenever something changed, this should take care of the situation.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://247432]
Approved by jsprat
help
Chatterbox?
[Tux]: And I just tested, neither do other Tk apps :) (95% of my Tk Apps is either just monitoring (no input) or input of just numbers). Something to investigate then
[choroba]: Maybe something like this?
[choroba]: I vaguely remember we had problems with dead keys in Tk at $work - 2, but I forgot all the details
[choroba]: but it was worse on MSWin than on Linux
[choroba]: (and OSX didn't exist yet)
[choroba]: Also, I'd try starting the App with the US layout and switch to the dead keys layout later

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (5)
As of 2017-09-25 20:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    During the recent solar eclipse, I:









    Results (290 votes). Check out past polls.

    Notices?