bac2bac at bac2bac
Nov 30, 2011, 12:20 PM
Post #6 of 6
My point about switching the lines in startup.pl was to give you a
Re: Running multiple copies of same site in ModPerl
[In reply to]
better understanding of what was going on. It was not intended as a fix.
Looks like you've got your base.pm package declaration right. But for
your sites to work as intended, you've got to do that for all the
modules in /ORIG/mods and /COPY/mods, not just the response handler. And
then you have to change all the code that once refered to
"mods::something" to "ORIG::mods::something" and same for COPY.
But please do NOT do this as it's a bad idea and leads to premature aging.
If you're interested further in the namespace issue, check this out from
the Practial mod_perl book:
As for a good solution, which I forgot to mention but others have, go
with #2 -- setting up separate instances of Apache on the same physical
server. The Practical mod_perl book has information on multiple server
setups too and good points to consider when running separate dev,
staging and production servers.
On 11/30/2011 10:15 AM, Nishikant Kapoor wrote:
> Michael Peters wrote:
>> On 11/29/2011 10:29 PM, Nishikant Kapoor wrote:
>>> I have been running a ModPerl site fine with following configuration.
>>> The problem started when I made a complete copy of the original site and
>>> tried to run the two in the same environment. For some reason, calling
>>> up the ORIG site (http://127.0.0.1/ORIG/) now calls the COPY site at
>>> http://127.0.0.1/COPY/. None of the changes made in ORIG::MODS::base.pm
>>> are getting picked up even after restarting the apache server. However,
>>> changes to COPY::MODS::base.pm are showing up fine.
>> The problem is that mod_perl uses the same Perl interpreter for
>> everything (by default) and that interpreter is persistent. I'm
>> guessing that your "package" declaration in ORIG::MODS::base.pm and
>> COPY::MODS::base.pm are the same. Perl won't load 2 packages of the
>> same name. The usual solutions are:
> I thought about that too, and so I did change the "package" declaration
> in ORIG::MODS::base.pm and COPY::MODS::base.pm but calling up
> http://127.0.0.1/ORIG/ still calls http://127.0.0.1/COPY/. Here is what
> each base.pm has:
> package COPY::MODS::base;
> package ORIG::MODS::base;
> And, as gAzZaLi suggested, I also tried switching the order of the ORIG
> and COPY lines in startup.pl, and I could see the changes made in ORIG
> but not the changes in COPY. So, COPY indeed is overriding ORIG.
> As for the #2 mentioned below, are there any pointers that you could
> refer to?
>> 1) rename your modules so that they don't have the same package names.
>> 2) run multiple separate apaches on the same physical server (not as
>> hard as it seems to most people and pretty easy to do if you're
>> running a proxy in front. And you really should be running a proxy in
>> 3) Try to have multiple Perl interpreters using a different Apache
>> MPM. I haven't seen anyone give a definitive guide to how to do this
>> (although I could have missed something) and results seem to be mixed.
>> I prefer #2 and use it constantly. It also makes it really easy to
>> have separate dev environments each using their own code.