3 apache perl mod-perl mojolicious
我有一个〜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;
Run Code Online (Sandbox Code Playgroud)
这有效,但现在我想使用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;
Run Code Online (Sandbox Code Playgroud)
我得到一个空白页面.是否可以将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>
Run Code Online (Sandbox Code Playgroud)
其次你的模块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;
Run Code Online (Sandbox Code Playgroud)
这就是你所需要的.所述Plack::Handler::Apache2构建之间的层mod_perl和Mojolicious.当然你需要一个脚本myapp.此脚本还允许您从桌面控制台运行Web应用程序,例如在开发和测试期间.
| 归档时间: |
|
| 查看次数: |
841 次 |
| 最近记录: |