在Apache下使用FastCGI中的Catalyst调度

时间:2014-06-04 15:17:24

标签: apache perl fastcgi catalyst mod-fastcgi

我在教自己催化剂。我非常想组织我的应用程序,每个控制器都有多个控制器和多个操作,也许可以尝试连锁,但我不知道如何在我的特定设置下完成这项工作。

我可以完全控制运行外部FastCGI服务器的计算机,但我无法访问运行Apache的计算机。我可以“配置”服务器的唯一方法是发布一张支持票,询问“你们可以尝试将这些行添加到Apache配置吗?”,并希望能够做到最好。

到目前为止,我已要求他们尝试此配置:

Alias /myapp/ /tmp/myapp.fcgi
FastCgiExternalServer /tmp/myapp.fcgi -host myserver:3010

但是,当然,如果有人连接到http://theirserver/myapp,则此功能正常,但我无法使用http://theirserver/myapp/controller/action/etc进行此配置。

所以这是我的多部分问题:

  1. 是否有一种简单的方法来配置Apache,以便我能够使用更好的调度,甚至可能使用链 - 即每个可能的控制器操作都没有Alias

  2. 如果无法完成,则表示只有查询可用。在这种情况下,在Catalyst中发送请求的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

我发现对我来说是一个可接受的解决方案,但我仍然在寻找Apache配置或Catalyst-as-external-FastCGI调度的最佳实践。无论如何,如果你知道更好的方法,请回答这个问题!

模块Catalyst::ActionRole::QueryParameter使得可以根据查询参数处理请求的分派。我已经能够用它来构建一个如下所示的控制器:

package MyApp::Controller::Root;

use Moose;
use namespace::autoclean;

BEGIN { extends 'Catalyst::Controller::ActionRole'; }

__PACKAGE__->config(
    namespace    => '',
    action_roles => ['QueryParameter'],
);

sub default :Path {
  my ( $self, $c ) = @_;
  $c->response->body('no action specified!');
}

sub login :Path :QueryParam('action:eqlogin') {
    my ( $self, $c ) = @_;
    $c->response->body('login')
}

sub logout :Path :QueryParam('action:eqlogout') {
    my ( $self, $c ) = @_;
    $c->response->body('logout')
}

__PACKAGE__->meta->make_immutable;

1;

甚至可以使用某种链as shown in the provided example application,,尽管这似乎没有我在手册中所读到的那么令人满意。

在撰写本文时,字符串比较在此模块中不起作用,因此使用此解决方案可能意味着将小补丁应用于QueryParameter.pm,如this bug report.中所述