我在教自己催化剂。我非常想组织我的应用程序,每个控制器都有多个控制器和多个操作,也许可以尝试连锁,但我不知道如何在我的特定设置下完成这项工作。
我可以完全控制运行外部FastCGI服务器的计算机,但我无法访问运行Apache的计算机。我可以“配置”服务器的唯一方法是发布一张支持票,询问“你们可以尝试将这些行添加到Apache配置吗?”,并希望能够做到最好。
到目前为止,我已要求他们尝试此配置:
Alias /myapp/ /tmp/myapp.fcgi
FastCgiExternalServer /tmp/myapp.fcgi -host myserver:3010
但是,当然,如果有人连接到http://theirserver/myapp
,则此功能正常,但我无法使用http://theirserver/myapp/controller/action/etc
进行此配置。
所以这是我的多部分问题:
是否有一种简单的方法来配置Apache,以便我能够使用更好的调度,甚至可能使用链 - 即每个可能的控制器操作都没有Alias
?
如果无法完成,则表示只有查询可用。在这种情况下,在Catalyst中发送请求的最佳做法是什么?
答案 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.中所述