【问题标题】:How can I write a Perl web app that supports CGI, FastCGI and mod_perl?如何编写支持 CGI、FastCGI 和 mod_perl 的 Perl Web 应用程序?
【发布时间】:2010-11-07 00:33:58
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    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】:

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

      CGI.pm 在普通 CGI.pm 环境中表现非常好,而且 带有对 mod_perl 和 mod_perl2 的内置支持以及 快速CGI。

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

      【讨论】:

      • 我在考虑使用 mod_perl / mod_perl2 的更高级功能,并实际使用 FastCGI(也许是 FastCGI 包装器?)
      • ... 如果您在 CGI 中运行并且这些高级功能不可用,您会怎么做?您正在为 mod_perl 和 CGI​​ 的基本代码编写快速/优雅/任何代码,使您的工作加倍...
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我很惊讶还没有人给出明确的答案。使用Catalyst。借助 Catalyst,在任何 Web 环境(包括 vanilla CGI、FastCGI、mod_perl 等)中进行部署都很容易。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2013-07-31
            • 2013-12-21
            • 2014-10-03
            • 1970-01-01
            • 2010-09-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-03
            相关资源
            最近更新 更多