我有一个〜15岁的Perl-Application。 该应用程序在Apache上运行,示例代码如下:
Locale
这有效,但现在我想使用Mojolicious来实现我的新功能。 但是如何将Mojolicious整合到这个应用程序中呢? 当我做以下
SELECT o.*, GROUP_CONCAT(DISTINCT ot.name) organisationTypeName FROM
recruitment as re, ahig_services as ahs, salary_options as so, pay_roll as pr,
resource_legal as rl, training as tr, organisation as o INNER JOIN
organization_type ot ON FIND_IN_SET(ot.id, o.organisationType) > 0 where
re.organisationId=o.id AND ahs.organisationId=o.id AND so.organisationId=o.id
AND pr.organisationId=o.id AND rl.organisationId=o.id AND
tr.organisationId=o.id GROUP BY o.id,o.organisationType ORDER BY o.id ASC
limit 0, 10
我得到一个空白页面。是否可以将Mojo集成到我的应用程序中?
答案 0 :(得分:6)
如果您想获得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
。此脚本还允许您从桌面控制台e运行Web应用程序。 G。在开发和测试期间。