簡體   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