[英]Mojolicious in Apache mod_perl
我有一个〜15岁的Perl-Application。 该应用程序在Apache上运行,示例代码如下所示:
use Apache2::RequestUtil ();
use Apache2::RequestRec ();
use Apache2::Const -compile => qw(OK);
sub handler {
my $r = shift;
Apache2::RequestUtil->request($r)
$r->subprocess_env;
$r = Apache2::RequestUtil->request;
$r->content_type("text/html");
$r->print("Hello World");
};
return Apache2::Const::OK;
}
1;
这有效,但现在我想使用Mojolicious来实现我的新功能。 但是如何将Mojolicious整合到这个应用程序中呢? 当我做以下
use Apache2::RequestUtil ();
use Apache2::RequestRec ();
use Apache2::Const -compile => qw(OK);
sub handler {
my $r = shift;
Apache2::RequestUtil->request($r
$r->subprocess_env;
$r = Apache2::RequestUtil->request;
get '/:foo' => sub {
my $self = shift;
my $foo = $self->param('foo');
$self->render(text => "Hello from $foo.");
};
return Apache2::Const::OK;
}
app->start;
1;
我得到一个空白页面。 是否可以将Mojo集成到我的应用程序中?
如果您想要Mojolicious的好处,则不应直接使用Apache请求。
首先,您需要特殊的虚拟主机配置。 请参阅https://github.com/kraih/mojo/wiki/Apache-deployment并向下滚动到Apache / mod_perl(PSGI / Plack)一章 。 我撰写了这一章,因为我在mod_perl下运行了十几个Mojo应用程序,并且找到一种有效的方法需要一些试验和错误。
这里以Apache配置文件为例:
<VirtualHost *:80>
ServerName myapp.local
DocumentRoot /home/sri/myapp
PerlOptions +Parent
<Perl>
$ENV{PLACK_ENV} = 'production';
$ENV{MOJO_HOME} = '/home/sri/myapp';
$ENV{MOJO_MODE} = 'deployment';
</Perl>
<Location />
SetHandler perl-script
PerlResponseHandler Plack::Handler::Apache2
PerlSetVar psgi_app /home/sri/myapp/script/myapp
</Location>
</VirtualHost>
您的模块MyApp.pm
应该如下所示:
package MyApp;
use Mojo::Base 'Mojolicious';
sub startup {
my $app = shift;
my $routes = $app->routes;
$routes->get('/:foo' => sub {
my $self = shift;
my $foo = $self->param('foo');
$self->render(text => "Hello from $foo.");
});
}
1;
这就是你所需要的。 Plack::Handler::Apache2
在mod_perl
和Mojolicious
之间构建了一个层。 当然你需要一个脚本myapp
。 此脚本还允许您从桌面控制台运行Web应用程序,例如在开发和测试期间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.