On Sun, 31 Mar 2002 12:43:45 -0800 (PST) [EMAIL PROTECTED] wrote:
> Hi! I had a question regarding where I should be placing global
> configuration options in mod_perl. Here's the qweekie scenario:
>
> I want to load a configuration file of various options (such as db
> arguments, system directories, db connections, etc.) into a hash or
> perl object global to Apache so that my mod_perl handlers have access
> to this variable/object, kinda like the %ENV variable except that I
> wish to keep these pieces of information separate from the %ENV
> variable. Initially, I thought about loading this configuration
> information in a startup script and using the PerlRequire directive to
> load this script. However, since doing this code will run under root
> privileges, would it be a good idea to place this type of information
> in this file? Also, I read about issues of database handlers becoming
> unstable across forks. So should I place this initialization
> information into a perl child init handler?
>
> Second if I want to utilize virtual hosting on a single machine with
> mod_perl loaded into certain hosts, what would this situation do in
> terms of allowing those hosts to access these variables? What should
> I do if I want a kind of separate configuration environment per
> virtual host in mod_perl and to load that configuration environment up
> before a request to improve performance?
We use PerlSetVar's for this where I work. It goes something like this:
<Location /foo>
SetHandler perl-script
PerlHandler MyHandler::Foo
PerlSetVar DatabaseName foo
PerlSetVar DatabaseUser foouser
PerlSetVar DatabasePass foo$secret
</Location>
In the code we grab these variables like so:
sub handler {
my $r = shift;
my %vars = ();
$vars{dbname} = $r->dir_config('DatabaseName');
$vars{dbuser} = $r->dir_config('DatabaseUser');
$vars{dbpass} = $r->dir_config('DatabasePass');
}
We actually have 10 or so common configuration parameters on most of
of our modules so we move all of our $r->dir_configs into an init()
subroutine.
Anyway... this might be one way to attack your problem, as you can
then use different parameters on each virtual host.
---------------------------------
Frank Wiles <[EMAIL PROTECTED]>
http://frank.wiles.org
---------------------------------