2

如何在 Perl 中编写 Web 应用程序,以便它可以作为普通 CGI 脚本、FastCGI / FCGI 脚本和来自mod_perl/ mod_perl2(最​​好只使用核心 Perl 模块和来自 libwww-Perl 的模块,并尽量减少 Perl CPAN 模块的数量)必须安装)?我想尽量减少将脚本从使用 CGI 更改为使用 FastCGI 或 mod_perl 的更改。

进一步的限制:如果可能的话,我想将 Web 应用程序保存在单个文件中,而不是像目前那样将其拆分为模块。

有问题的 Web 应用程序是 gitweb,Git Web 界面,如果重要的话。

4

5 回答 5

5

我很惊讶还没有人给出明显的答案。使用催化剂。使用 Catalyst,在任何 Web 环境中进行部署都很简单,包括 vanilla CGI、FastCGI、mod_perl 等。

于 2009-07-01T14:34:32.083 回答
2

gitweb 已经使用 CGI,根据文档(免责声明:我从未测试过),它支持所有开箱即用的 CGI:

CGI.pm 在 vanilla CGI.pm 环境中表现非常好,并且还内置了对 mod_perl 和 mod_perl2 以及 FastCGI 的支持。

最后一部分并不完全正确,因为您仍然需要FCGI来支持 FastCGI,这需要安装 C 编译器。

于 2009-06-30T16:40:26.183 回答
2

正如 Sinan 指出的那样,您将代码分成模块。他没有使用“模型-视图-控制器”(MVC)这个神奇的术语。您真的在问如何使用 MVC 并支持多个控制器。您的模型和视图是相同的,并且您的不同控制器使用它们来驱动应用程序。

于 2009-07-01T08:08:09.710 回答
2

将功能放在模块中。让脚本只执行一个功能:选择要实例化的应用程序模块并处理特定于平台的内容,然后委托给通用功能。因此,您最终会得到一个要调用的脚本,三个或四个模块来实现每个平台,以及一个模块来实现通用功能。

App/bin/app.pl  

App/lib/App/Common.pm

App/lib/App/Apache1.pm
App/lib/App/Apache2.pm
App/lib/App/CGI.pm
App/lib/App/FCGI.pm
于 2009-06-30T15:07:21.213 回答
0

另一种可能的解决方案是使用HTTP::Engine
(另见Perl Programming/HTTP::Engine wikibook)。

于 2009-07-07T08:28:55.070 回答