Apache mod_perl中的Mojolicious

时间:2017-01-23 08:03:31

标签: apache perl mojolicious mod-perl

我有一个〜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集成到我的应用程序中?

1 个答案:

答案 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::Apache2mod_perlMojolicious之间构建了一个图层。当然你需要一个脚本myapp。此脚本还允许您从桌面控制台e运行Web应用程序。 G。在开发和测试期间。