如何编写支持CGI,FastCGI和mod_perl的Perl Web应用程序?

时间:2009-06-30 13:59:54

标签: perl cgi web-applications fastcgi mod-perl

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

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

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

5 个答案:

答案 0 :(得分:5)

我很惊讶没有人给出明显的答案。使用Catalyst。使用Catalyst,在任何Web环境中部署都是微不足道的,包括vanilla CGI,FastCGI,mod_perl等。

答案 1 :(得分: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

答案 2 :(得分:2)

gitweb已经使用了CGI,根据Documentation(免责声明:我从未测试过这个),支持所有开箱即用的内容:

  

CGI.pm在香草CGI.pm环境中表现非常出色   内置支持mod_perl和mod_perl2以及   FastCGI的。

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

答案 3 :(得分:2)

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

答案 4 :(得分:0)

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