3

我正在自学催化剂。我非常想用多个控制器和多个动作来组织我的应用程序,也许可以尝试链,但我不确定如何在我的特定设置下使其工作。

我可以完全控制运行外部 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 中发送请求的最佳做法是什么?

4

1 回答 1

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;

甚至可以使用某种链,如提供的示例应用程序中所示,尽管这似乎并不像我在手册中读到的那样令人满意。

在写这篇文章的时候,字符串比较在这个模块中不起作用,所以使用这个解决方案可能意味着应用一个小补丁到QueryParameter.pm,正如这个错误报告中所建议的那样。

于 2014-06-05T12:33:40.407 回答