2013-07-09 4 views
1

원래 Catalyst 5.7 용으로 개발 된 Catalyst 응용 프로그램을 가지고 있고 몇 년 전에 Catalyst 5.8로 업데이트했습니다.

이제 우리는 Catalyst 5.9로 업그레이드하려고하는데, $ c-> uri_for()를 호출하면 적당한 결과를 얻지 못하지만, standalone 디버그 서버에서 실행될 때가 아니라 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; 

, 나는 다음과 같은 얻을 디버그 출력 (수정) :

Jul 9 15:09:51 dc8 dc-web: Base: http://localhost:3000/ 

을 나는 FastCGI를 (잘못된)와 lighttpd를 통해 동일한 코드를 실행하면 :

Jul 9 15:10:25 dc8 dc-web: Base: http://localhost:8080/foo/ 
,

데비안 wheezy의 Catalyst 5.90015-1을 사용하고 있습니다. 최신 버전으로 업그레이드하려고 시도했지만 일부 종속 항목에는 최신 버전의 perl이 필요했습니다. 또한, Changelog은 (분명히) 관련 uri_for 픽스를 언급하지는 않습니다.

따라서 lighttpd와 Catalyst 사이에 일종의 손상이 있다고 가정합니다. 하지만 여기서 어디로 가야합니까?

답변

1

대답은 Catalyst 5.9가 더 이상 lighttpd가 전달한 환경 변수를 수정하지 않아도되는 것 같습니다. Plack::Middleware/LighttpdScriptNameFix 모듈을 사용하여 다시 활성화 할 수 있습니다.

나는 추가하여 수행 :

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

추정되게, 1.4.23 이상이 또한 lighttpd를의 설정에 내부 fastcgi.server fix-root-scriptname 플래그를 활성화하여 수행 할 수 있습니다 lighttpd를 함께, 그러나 이것은 작동하지 않았다 나를 위해.