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',
});
}
# 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