I'm using mod_perl on Windows 7, and am trying to set things up so that I can
reload my script and all the modules it uses, without having to restart Apache.
The problem is that my script (called webitext.cgi) updates the @INC variable
using statements like these:
---
use lib "$ENV{WEBITEXT_HOME}";
use lib "$ENV{WEBITEXT_HOME}/bin";
etc...
---
where the value of $ENV{WEBITEXT_HOME} is set differently depending on the
virtual host it's running on. I use this so I can have two versions of my app
on the server, a production and a test version, each running under a different
vhost which defines the env variable differently (using Apache SetEnv).
The problem is that when Apache::Reload tries to reload the modules, it does
not find them, because it seems to use the value of @INC as it was BEFORE the
script was run (i.e. not including the ones added with the 'use lib'
statements).
This problem occurs whether I use the 'PerlSetVar ReloadTouchFile' approach or
the Apache::StatINC approach. It seems to be a well documented limitation of
Apache::Reload.
So... I thought about setting the @INC path outside of the script. But I need
to do this on a per-vhost basis. According to this page:
http://perl.apache.org/docs/2.0/user/config/config.html#Modifying_C__INC__on_a_Per_VirtualHost
I should be able to do this with something like this:
---
<VirtualHost ...>
ServerName webitextprod
PerlOptions +Parent
PerlSwitches -Idir1 -Idir2 etc...
</VirtualHost>
---
But when I tried this and ran httpd.exe -t -c httpd.conf, it crashed with the
dreaded "free to wrong pool" error:
---
Free to wrong pool 2b60100 not 3d4f10.
---
This error seems to be caused by the PerlOptions +Parent line.
Any suggestion for how to fix or get around this problem would be greatly
appreciated.
Thx.
Alain Désilets