繁体   English   中英

Apache mod_perl中的Mojolicious

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM