我正在尝试让Plack::App::CGIBin
在FreeBSD 8.2上使用Apache2和FastCGI工作。最终目标是能够使用这种设置通过 Plack 提供一大堆遗留的 CGI 脚本,以便利用其中间件功能,但我甚至无法获得一个简单的示例。
我已经遵循了 Plack::Handler::FCGI 和 Plack::App::CGIB本身的 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;
};
然后我在/data/www/plack/test.cgi
有一个简单的 CGI 脚本(这个文件在 CGI.pm 下运行良好)。
我期望的是http://<domain>/plack/test.cgi/
请求(包括尾部斜杠)会返回测试脚本,但我总是在 Apache 错误日志中收到以下 404 错误,我认为这是从 FastCGI 服务器返回的:
FastCGI: server "/tmp/placktest.fcgi" stderr: <IP address/date>; "GET /plack/test.cgi HTTP/1.1" 404 9 "-" <User agent string>;
我让 FastCGI 自己工作,在应用了SetHandler fastcgi-script
的目录中使用 mod_fastcgi 和一个简单的示例脚本,所以至少有效:-)。
有没有人Plack::App::CGIBin
在类似情况下工作?我将非常感谢任何见解!
谢谢
我想你需要改变
builder {
mount "/plack" => $app;
};
自
builder {
mount "/" => $app;
};
因为你的别名正在删除/plack/
或者只是改变
# 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配置。