Perl $c->;需求->;升级至Catalyst 5.90后,底座断裂

Perl $c->;需求->;升级至Catalyst 5.90后,底座断裂,perl,fastcgi,lighttpd,catalyst,Perl,Fastcgi,Lighttpd,Catalyst,我们有一个旧的Catalyst应用程序,最初是为Catalyst 5.7开发的,几年前更新为Catalyst 5.8 现在我们正在尝试升级到Catalyst 5.9,现在对$c->uri_for()的调用没有给出合理的结果,但只有在从lighttpd运行时,而不是从独立调试服务器运行时才会给出合理的结果 我去掉了除Root.pm之外的所有应用程序控制器,并将其变成了一个子系统: package DCWeb::Controller::Root; use strict; use warnings;

我们有一个旧的Catalyst应用程序,最初是为Catalyst 5.7开发的,几年前更新为Catalyst 5.8

现在我们正在尝试升级到Catalyst 5.9,现在对$c->uri_for()的调用没有给出合理的结果,但只有在从lighttpd运行时,而不是从独立调试服务器运行时才会给出合理的结果

我去掉了除
Root.pm
之外的所有应用程序控制器,并将其变成了一个子系统:

package DCWeb::Controller::Root;

use strict;
use warnings;
use 5.10.0;
use Moose;
use namespace::autoclean;

BEGIN { extends 'Catalyst::Controller' }

__PACKAGE__->config->{namespace} = '';

sub foo :Path {
    my ( $self, $c ) = @_;
    $c->log->debug("Base: ".$c->req->base);
}

1;
当我从独立调试服务器运行代码时,我得到以下调试输出(正确):

当我使用FastCGI通过lighttpd运行相同的代码时(不正确):

我正在使用Debian wheezy的Catalyst 5.90015-1。我试图升级到最新版本,但有些依赖项需要更新版本的perl。此外,报告似乎没有提到任何(显然)与修复相关的uri_


因此,我假设lighttpd和Catalyst之间存在某种断裂。但是我该怎么办呢?

答案似乎是Catalyst 5.9不再对lighttpd传递的环境变量进行必要的修复。这可以使用模块重新启用

为此,我添加了以下内容:

use Catalyst qw/
.
.
            EnableMiddleware
    /;
use Plack::Middleware::LighttpdScriptNameFix;
.
.
__PACKAGE__->config(
    'Plugin::EnableMiddleware' => [
        'LighttpdScriptNameFix',
    ],
);

据称,对于lighttpd 1.4.23或更高版本,这也可以通过在lighttpd配置中启用fastcgi.server内的
修复根脚本名
标志来实现,但这对我不起作用。

答案似乎是Catalyst 5.9不再对lighttpd传递的环境变量进行一些必要的修复。这可以使用模块重新启用

为此,我添加了以下内容:

use Catalyst qw/
.
.
            EnableMiddleware
    /;
use Plack::Middleware::LighttpdScriptNameFix;
.
.
__PACKAGE__->config(
    'Plugin::EnableMiddleware' => [
        'LighttpdScriptNameFix',
    ],
);
据称,对于lighttpd 1.4.23或更高版本,这也可以通过在lighttpd配置中启用fastcgi.server内的
fix root scriptname
标志来实现,但这对我不起作用

use Catalyst qw/
.
.
            EnableMiddleware
    /;
use Plack::Middleware::LighttpdScriptNameFix;
.
.
__PACKAGE__->config(
    'Plugin::EnableMiddleware' => [
        'LighttpdScriptNameFix',
    ],
);