You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Lawrence Waterhouse <la...@gmail.com> on 2005/05/10 20:33:00 UTC

Running multiple instances of the same app with vhost's

Hello folks,

This is for a HTML::Mason application but i believe its a problem with my
mod_perl/apache configuration...

I am trying to configure my apache/handler to run multiple instances of the
same application (one for each of our client). Basicly I need the following:

1. each client use the same 'comp_root'. (same application for all!) 2. each
client connect to is own db (think I got that without much
problems) 3. each client globals run in there own namespace (think I got it
with the 'in_package' config)

So client1 connect to client1.example.com, client2 connect to
client2.example.com and so on.

Here my current setup... I am really in need for advise on this one, this
setup don't seem to work for an unknown reason.

Apache 1.33
Mason  1.28

VirtualHost part of my apache config:
ServerName 127.0.0.1
NameVirtualHost *

<VirtualHost *>
    ServerName client1.example.com
    PerlSetVar ClientName client1

    <LocationMatch "(\.html|\.txt|\.pl)$">
        SetHandler perl-script
        PerlHandler MyApp::Mason
    </LocationMatch>

    <LocationMatch "(dhandler|autohandler|\.m(html|txt|pl))$">
        SetHandler perl-script
        PerlInitHandler Apache::Constants::NOT_FOUND
    </LocationMatch>
</VirtualHost>
        
<VirtualHost *>
    ServerName client2.example.com
    PerlSetVar ClientName client2
    
    <LocationMatch "(\.html|\.txt|\.pl)$">
        SetHandler perl-script
        PerlHandler MyApp::Mason
    </LocationMatch>
    
    <LocationMatch "(dhandler|autohandler|\.m(html|txt|pl))$">
        SetHandler perl-script
        PerlInitHandler Apache::Constants::NOT_FOUND
    </LocationMatch>
</VirtualHost>

Handler.pl:
#!/usr/bin/perl
package MyApp::Mason;

# Pragmas
use strict;
use warnings;

# Modules
use Apache::Constants;
use HTML::Mason::ApacheHandler;

# ApacheHandler global hash
my %ah;

# List of modules that you want to use within components.
{
    package HTML::Mason::Commands;
    use Apache::DBI;
    use DBI;
    use DBD::mysql;
    use Data::Dumper;
    use LWP::UserAgent;
}

foreach my $client ( qw(client1 client2) ) {
    $ah{$client} = HTML::Mason::ApacheHandler->new
    (
        in_package    => "MyApp::$client",
        args_method   => 'CGI',
        comp_root     => 'C:\Internet\Apache.v1.33\htdocs',
        data_dir      => 'C:\Internet\Apache.v1.33\temp',
        allow_globals => ['$dbh', '%session', '$client'],
    );
}

sub handler
{
    my $r = shift;
        
    my $client = $r->dir_config('ClientName');
    
    return DECLINED unless exists $ah{$client};
    
    {
        no strict 'refs';
        local ${"MyApp::${client}::dbh"} = DBI->connect(
"DBI:mysql:host=127.0.0.1;dbname=$client", 'root', 'password' )
        or die "Cannot connect to database: $DBI::errstr!\n";
    }
    
    my $status = $ah{$client}->handle_request($r);
    
    return $status;
}

1;



Re: Running multiple instances of the same app with vhost's

Posted by Perrin Harkins <pe...@elem.com>.
On Tue, 2005-05-10 at 14:33 -0400, Lawrence Waterhouse wrote:
> Here my current setup... I am really in need for advise on this one, this
> setup don't seem to work for an unknown reason.

How can you tell it's not working?  What have you tried to debug it?

- Perrin