34

Plack::App::CGIBinFreeBSD 8.2 で Apache2 と FastCGI を使用して作業を開始しようとしています。最終的な目標は、このセットアップを使用して、Plack を介して大量のレガシー CGI スクリプトを提供し、そのミドルウェア機能を利用できるようにすることですが、単純な例でさえ機能させることができませんでした。

Plack::Handler::FCGIおよびPlack::App::CGIBin自体に関する CPAN ドキュメントに従いましたが、これらのドキュメントでカバーされていない何かを見逃しているのか、間違っているのかはわかりません。

これは私が追加した Apache 設定です:

# Set up external server
FastCgiExternalServer /tmp/placktest.fcgi -socket /tmp/fcgi.socket

# URL to be handled by FastCGI
Alias /plack/ /tmp/placktest.fcgi/

外部サーバーを実行するコマンド:

plackup -s FCGI --listen /tmp/fcgi.socket /data/www/psgi/app.psgi

サーバーが正常に起動し、次が返されます。

FastCGI: manager (pid <pid>): initialized
FastCGI: manager (pid <pid>): server (pid <pid>) started
FastCGI: server (pid <pid>): initialized

これは app.psgi です:

#!/usr/bin/env plackup -s FCGI

use Plack::App::CGIBin;
use Plack::Builder;

my $app = Plack::App::CGIBin->new(
    root => '/data/www/plack',
)->to_app;

builder {
    mount "/plack" => $app;
};

次に、単純な CGI スクリプトを/data/www/plack/test.cgi(このファイルは CGI.pm で正常に動作します) に置きます。

へのリクエストhttp://<domain>/plack/test.cgi/(末尾のスラッシュを含む) がテスト スクリプトを返すことを期待していますが、Apache エラー ログに常に次の 404 エラーが表示されます。

FastCGI: server "/tmp/placktest.fcgi" stderr: <IP address/date>; "GET /plack/test.cgi HTTP/1.1" 404 9 "-" <User agent string>;

mod_fastcgi とSetHandler fastcgi-script適用されたディレクトリ内の単純なサンプル スクリプトを使用して、FastCGI を独自に動作させたので、少なくとも動作しました :-)。

誰かがPlack::App::CGIBin同様のシナリオの下で働いていますか? 洞察をいただければ幸いです。

ありがとう

4

1 に答える 1

1

私はあなたが変更する必要があると思います

builder {
    mount "/plack" => $app;
};

builder {
    mount "/" => $app;
};

エイリアスが /prack/ を削除しているため

または単に変更する

# URL to be handled by FastCGI
Alias /plack/ /tmp/placktest.fcgi/

# URL to be handled by FastCGI
Alias /plack/ /tmp/placktest.fcgi/plack/

結局、これは Perl に関する質問ではなく、Apache の構成に関するシステム管理者に関する質問のようです。

于 2015-02-21T12:58:15.427 に答える