2009-06-30 6 views
2

Как написать веб-приложение в Perl, чтобы он мог работать как простой скрипт CGI, как скрипт FastCGI/FCGI, и от mod_perl/mod_perl2 (желательно с использованием только основных модулей Perl и модулей libwww-Perl и минимизации количества Perl CPAN, которые необходимо установить)? Я хотел бы свести к минимуму изменения, которые нужно сделать, чтобы сменить сценарий с помощью CGI на тот, который использует FastCGI или mod_perl.Как написать веб-приложение Perl, поддерживающее CGI, FastCGI и mod_perl?

Дальнейшее ограничение: если возможно, я хотел бы использовать веб-приложение в одном файле и не разбивать его на модули, как сейчас.

Веб-приложение, о котором идет речь, является gitweb, веб-интерфейсом Git, если это имеет значение.

ответ

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

GitWeb уже использует CGI, который в соответствии с Documentation (Отказ от ответственности: Я никогда не проверял это), поддерживает все те из коробки:

CGI.pm выполняет очень хорошо в ванильная среда CGI.pm, а также поставляется со встроенной поддержкой mod_perl и mod_perl2, а также FastCGI.

Последняя часть не соответствует действительности, поскольку для поддержки FastCGI вам все еще требуется FCGI, для которой необходим компилятор C для установки.

+0

Я думал об использовании более продвинутых функций mod_perl/mod_perl2 и фактически использовал FastCGI (возможно, обертку FastCGI?) –

+1

... И что бы вы сделали, если бы вы работали в CGI, и эти дополнительные функции недоступны? Вы настраиваете себя на быстрый/элегантный/любой код для mod_perl и базовый код для CGI, удваивая вашу работу ... – ijw

2

Как указывает Синан, вы разделяете код на модули. Он не использовал магический термин «Model-View-Controller» (MVC). Вы действительно спрашиваете, как использовать MVC и поддерживать несколько контроллеров. Ваша модель и представления одинаковы, и ваши разные контроллеры используют их для управления приложением.

5

Я удивлен, что никто не дал очевидного ответа. Используйте Catalyst. С Catalyst тривиально развертывать в любой веб-среде, включая ванильные CGI, FastCGI, mod_perl и другие.