繁体   English   中英

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

[英]How can I write a Perl web app that supports CGI, FastCGI and mod_perl?

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

进一步的约束:如果可能的话,我想在单个文件中记录Web应用程序,而不是像目前那样将它拆分为模块。

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM