2012-04-27 3 views
1

Windows x64(Windows 2008 R2およびWindows 7)でmyapp_fastcgi.plスクリプトを使用しようとしているときに、Calatylstに問題があります。Catalyst/FCGI:Windows x64でmyapp_fastcgi.plが動作しない

httpサーバー経由でスクリプトにアクセスしようとすると、「このアプリケーションに内部エラーが発生しました」というメッセージが表示されます(IIS7.5とApache 2.4の両方でこれを取得します)。問題のポイント番ピンにしようと、私はDOSコンソールでスクリプトを実行し、私はこれを得る:

Use of uninitialized value $value in pattern match (m//) at D:/perl/site/lib/Config/General.pm line 872. 
Use of uninitialized value in concatenation (.) or string at D:/perl/site/lib/Plack/Handler/FCGI.pm line 114, <DATA> line 998. 
Use of uninitialized value in quotemeta at D:/perl/site/lib/Plack/Handler/FCGI.pm line 116, <DATA> line 998. 
Use of uninitialized value in string eq at D:/perl/site/lib/Catalyst.pm line 2770, <DATA> line 998. 
Use of uninitialized value $host in substitution (s///) at D:/perl/site/lib/Catalyst/Engine.pm line 444, <DATA> line 998. 
Use of uninitialized value $host in concatenation (.) or string at D:/perl/site/lib/Catalyst/Engine.pm line 451, <DATA> line 998. 
Use of uninitialized value $host in concatenation (.) or string at D:/perl/site/lib/Catalyst/Engine.pm line 459, <DATA> line 998. 
Use of uninitialized value in string eq at D:/perl/site/lib/Catalyst/Action/RenderView.pm line 51, <DATA> line 998. 
binmode() on unopened filehandle GEN2 at D:/perl/site/lib/Plack/Handler/FCGI.pm line 165, <DATA> line 998. 
print() on unopened filehandle GEN2 at D:/perl/site/lib/Plack/Handler/FCGI.pm line 177, <DATA> line 998. 
Use of uninitialized value in string eq at D:/perl/site/lib/Catalyst.pm line 1817, <DATA> line 998. 
print() on unopened filehandle GEN2 at D:/perl/site/lib/Plack/Handler/FCGI.pm line 179, <DATA> line 998. 

私は多くのhttpサーバで設定された環境のほとんどがあるこのような状況のように初期化エラーを気にしないが行方不明しかし、私はx32の環境(Windows XPの)の下で、まったく同じスクリプトを試してみたときに、私は次の出力を得るよう「GEN2」のFileHandler上の3つのエラーが私の陰謀:

より多くの私は乗るべきかのように聞こえる
<same init errors> 
Use of uninitialized value in string eq at D:/Perl/site/lib/Catalyst/Action/RenderView.pm line 51, <DATA> line 998. 
Status: 302 Found 
Location: http:///login 
Content-Length: 292 
Content-Type: text/html; charset=utf-8 
Set-Cookie: myapp_session=1e5994a41ea40c41764c4f2c0dc45592ef4b520f; path=/; 
expires=Wed, 25-Apr-2012 17:14:25 GMT; HttpOnly 
X-Catalyst: 5.90011 

Use of uninitialized value in string eq at D:/Perl/site/lib/Catalyst.pm line 1817, <DATA> line 998. 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/x 
html1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <title>Moved</title> 
    </head> 
    <body> 
    <p>This item has moved <a href="http:///login">here</a>.</p> 
    </body> 
</html> 

私のx64環境が正しく動作していればFCGI.pmモジュール内のビットを探し

は、いくつかの理由のためのx64の下で開かれていないが、私は理由を把握することはできませんし、私はこのことについて何のエラーを持っていないSTDINやSTDOUT *を*と私にヒント。だから私は、何かアドバイスやアイデアのためにここに来たか、誰もが前に、この種の問題に遭遇し、それを解決した場合、私は解決策を知っていることを熱望よ:)私がやったテストについて

もう少し:

  • x64でmyapp_server.plとmyapp_cgi.plに問題はありませんが、これらはうまくいきます。
  • のPerlのx64をアンインストールし、R2は、私は(私は道でのActivePerlを使用しています)同じGEN2エラーを取得し、それを解決していないWindows 2008でx32のバージョンでそれを置き換える
  • 私はすべてのテストのための管理者権限を持っていたし、 x64環境でUACが無効にされています

ありがとうございます!

+0

[コード、構成、FastCGIおよびPerlモジュールのバージョン番号を提供する](http://sscce.org/)ので、[問題を再現できる](http://www.chiark.greenend.org)。 uk /〜sgtatham/bugs.html#showmehow)。それ以外の場合は、可能な回答者のプールを、Catalystの知識を持つ人に限定して、エラーメッセージだけで問題を解決することができます。これらの人はここではハングしませんが、[IRC](http: /irc.perl.org)(MagNET '#catalyst')。 – daxim

+0

私はPerl 5.14.2を使用しています。 Catalystランタイムは5.90011、Plack 0.9985およびFCGI 0.74です。 Plack :: Handler :: FCGIにはPlackが付属していますが、特定のバージョンはありません。私はIRCを最後の手段として保存しています。おかげで – Deneteth

+0

コードに関しては、かなり広範囲になり、いくつかのモジュールに分割されているので、提供するのは難しいでしょう。エラーは、フレームワーク自体から来ているようです。 – Deneteth

答えて

1

これはさらにテストする必要がありますが、モジュールの比較後に、XPのPlack :: Handler :: FCGIのバージョンがppmリポジトリで利用可能なものより古いことと、サーバーにインストールしていたことがわかりますWindows 7。

どちらのバージョンでも、stdin、stdout、およびstderrを開く方法が異なります。

古いFCGI.pmバージョン(NO GEN2エラー):

(.. some code ..) 

my %env; 
    my $request = FCGI::Request(
     \*STDIN, \*STDOUT, 

     ($self->{keep_stderr} ? \*STDOUT : \*STDERR), \%env, $sock, 
     ($self->{nointr} ? 0 : &FCGI::FAIL_ACCEPT_ON_INTR), 
    ); 

新しいFCGI.pmバージョン(GEN2エラー):

(.. some code ..) 

    @{$self}{qw(stdin stdout stderr)} 
     = (IO::Handle->new, IO::Handle->new, IO::Handle->new); 

    my %env; 
    my $request = FCGI::Request(

     $self->{stdin}, $self->{stdout}, 
     ($self->{keep_stderr} ? $self->{stdout} : $self->{stderr}), \%env, $sock, 
     ($self->{nointr} ? 0 : &FCGI::FAIL_ACCEPT_ON_INTR), 
    ); 

その後の相互作用は、$自己を介して行われる - > {stdxxx }の代わりに* STDxxxの代わりに。

最新のPlackモジュールFCGI.pmを古いものに置き換えると、すべてのシステムでGEN2エラーが取り除かれます。私はPlackの人に詳細を尋ねます...

コメントのおかげで、正しい方向に私を指摘しました。

+0

これに関する更新? Dancerを使って同様の問題に遭遇したと思います。 – indiguy

関連する問題