"Kind-of" PerlSections, and location question
I'm wondering if this is possible at all, and if so, how to accomplish it... We have an application we're serving by using the same set of source code, and setting up different sections in the virtual host to set different variables and path aliases based on who the customer is... But we have clusters of 6 servers in multiple locations, with more such setups to come, and with the rate of having to add sites because of new customers and temp sites for sales demos, it's becoming difficult to manage so many setups in this fashon, and restarting apache becomes more and more an unpleasant thing to do with the more end-users that are hitting it. What I'd like to do (if even possible!), is have something like this: Have a databae table that stores the information for each setting, then load it dynamically as a request comes in... mailer dream code: $ENV{REQUEST_URI} =~ /^\/(.*?)\//; $base_path = $1; if (!exists($Location{$base_path})) { ... do database calls to load necessairy information ... and set as if this was a perl section in an ... httpd.conf file. } ... then execute as if that location section was always there If there's a better solution then this, I'm also eager to hear it :) Dan.
Re: "Kind-of" PerlSections, and location question
> Have a databae table that stores the information for each > setting, then load it dynamically as a request comes in... > mailer dream code: > > $ENV{REQUEST_URI} =~ /^\/(.*?)\//; > $base_path = $1; > if (!exists($Location{$base_path})) { > ... do database calls to load necessairy information > ... and set as if this was a perl section in an > ... httpd.conf file. > } > > ... then execute as if that location section was always there > > If there's a better solution then this, I'm also eager to > hear it :) Depending on the rate of server additions you might be better off loading these at startup time or on a user signal (e.g., $SIG{USR1} = \&reload_stuff_from_db). Timestamping the database entry for the site might also help, since you wouldn't have to re-load the entire thing every time the site was hit. -- Steven Lembark 2930 W. Palmer Workhorse Computing Chicago, IL 60647 +1 800 762 1582
Re: "Kind-of" PerlSections, and location question
On Mon, 15 Apr 2002, Steven Lembark wrote: > > Have a databae table that stores the information for each > > setting, then load it dynamically as a request comes in... > > mailer dream code: > > > > $ENV{REQUEST_URI} =~ /^\/(.*?)\//; > > $base_path = $1; > > if (!exists($Location{$base_path})) { > > ... do database calls to load necessairy information > > ... and set as if this was a perl section in an > > ... httpd.conf file. > > } > > > > ... then execute as if that location section was always there > > > > Timestamping the database entry for the site might also > help, since you wouldn't have to re-load the entire thing > every time the site was hit. > what I'm hoping to be able to do should only have to load the settings once (the first time a request comes in for that location) for each process, so I'm not too concerned about database access.. The main question I need answered first is, is this even possible? Dan.
Re: "Kind-of" PerlSections, and location question
> > what I'm hoping to be able to do should only have to load the > settings once (the first time a request comes in for that location) > for each process, so I'm not too concerned about database access.. > > The main question I need answered first is, is this even possible? IIRC, Jay Lawrence was playing with this exact thing just a few months ago, but I don't know how it turned out. you might want to ping him about it privately if he doesn't catch this thread. HTH --Geoff
Re: "Kind-of" PerlSections, and location question
Daniel W. Burke wrote: > We have an application we're serving by using the same > set of source code, and setting up different > sections in the virtual host to set different variables > and path aliases based on who the customer is... ... > What I'd like to do (if even possible!), is have something > like this: > > Have a databae table that stores the information for each > setting, then load it dynamically as a request comes in... Off the top of my head, there are two simple ways to do this. The first is to generate your httpd.conf using a template and database. I've done this using Template Toolkit, and it worked great. This also works for servers that don't have mod_perl, like proxy servers. The other way would be to write a PerlTransHandler to look at all incoming requests and then decide how to handle them based on your database info. This is better if you need to be able to update it without restarting apache. - Perrin