Perl $c->;需求->;升级至Catalyst 5.90后,底座断裂
我们有一个旧的Catalyst应用程序,最初是为Catalyst 5.7开发的,几年前更新为Catalyst 5.8 现在我们正在尝试升级到Catalyst 5.9,现在对$c->uri_for()的调用没有给出合理的结果,但只有在从lighttpd运行时,而不是从独立调试服务器运行时才会给出合理的结果 我去掉了除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;
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',
],
);