NAME

HTTP::Engine::Interface::ModPerl - mod_perl Adaptor for HTTP::Engine

SYNOPSIS

# App.pm
package App;
use Mouse; # or use Moose or use Any::Moose
use Data::Dumper;
use HTTP::Engine;

sub setup_engine {
    my($self, $conf) = @_;
    $conf->{request_handler} = sub { $self->handle_request(@_) };
    HTTP::Engine->new(
        interface => $conf,
    );
}

sub handle_request {
    my($self, $req) = @_;
    HTTP::Engine::Response->new(
        status => 200,
        body => Dumper($req),
    );
}


# app.pl
use strict;
use warnings;
use App;
App->new->setup_engine({
    module => 'ServerSimple',
    args => { port => 9999 },
})->run;


# App/ModPerl.pm
package App::ModPerl;
use Mouse; # or use Moose or use Any::Moose
extends 'HTTP::Engine::Interface::ModPerl';
use App;

sub create_engine {
    my($class, $r, $context_key) = @_;

    App->new->setup_engine({
        module => 'ModPerl',
    });
x  }


# in httpd.conf
PerlSwitches -Mlib=/foo/bar/app/lib
<VirtualHost 127.0.0.1:8080>
    <Location />
        SetHandler modperl
        PerlOptions +SetupEnv
        PerlResponseHandler App::ModPerl
    </Location>
</VirtualHost>

When you move the same application by two or more server name. Because the reason is because it makes instance every combination of SERVER_NAME, SERVER_PORT and DOCUMENT_ROOT.

# in httpd.conf
PerlSwitches -Mlib=/foo/bar/app/lib
<VirtualHost 127.0.0.1:8080>
    ServerName www.example.com
    ServerAlias host1.example.com
    ServerAlias host2.example.com
    ServerAlias host3.example.com
    <Location />
        SetHandler modperl
        PerlOptions +SetupEnv
        PerlSetEnv HTTP_ENGINE_CONTEXT_KEY YOUR_CHOICE_APPLICATION_UNIQUE_KEY
        PerlResponseHandler App::ModPerl
    </Location>
</VirtualHost>

CONFIG

required configuration in httpd.conf

SetHandler modperl
PerlOptions +SetupEnv

or

SetHandler perl-script

AUTHORS

Daisuke Maki

Tokuhiro Matsuno

Kazuhiro Osawa

SEE ALSO

HTTP::Engine, Apache2