如何在Perl中编写Web应用程序,以便它可以作为纯CGI脚本,FastCGI / FCGI脚本以及mod_perl
/ mod_perl2
(最好只使用核心Perl模块和那些)来自libwww-Perl,并最大限度地减少必须安装的Perl CPAN模块的数量)?我想尽量减少将脚本从使用CGI更改为使用FastCGI或mod_perl的脚本所需做的更改。
进一步限制:如果可能的话,我希望将web应用程序保存在单个文件中,而不是将其拆分为模块,就像目前一样。
有问题的网络应用程序是gitweb,Git web界面,如果重要的话。
答案 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)。