2009-03-20 2 views
5

У нас есть существующее приложение Perl, которое поддерживает mod_perl. Однако наш новый хост (Dreamhost) не поддерживает mod_perl, а только FastCGI; что требует порта.Как я могу перенести код Perl из mod_perl в FastCGI?

Существующий код не использует какие-либо атрибуты Apache и является нормальным Perl-кодом, написанным таким образом, что это приемлемо для mod_perl.

Чтение документации и онлайн-руководств, похоже, что добавление поддержки FastCGI включает в себя перенос существующего кода внутри определенного типа цикла. Ниже приведены наиболее часто данный код скелет:

A. Использование FCGI

use FCGI; 
while (FCGI::accept >= 0) 
{ 
    #Run existing code. 
} 

B. Использование CGI :: Fast

use CGI::Fast 
while (my $cgi = CGI::Fast->new()) 
{ 
    #Run existing code. 
} 

подвопросы:

  1. Есть методы A и B эквивалентные способы добавления поддержки FastCGI?
  2. Если A и B различны, что же за плюсы и минусы использования одного над другим?
  3. Есть ли какие-либо лучшие практики или gotchas, о которых следует знать при переносе с mod_perl на FastCGI?

Спасибо.

ответ

3

В общем случае приложение FastCGI очень похоже на CGI. Основное различие заключается в том, что вы можете воспользоваться тем фактом, что ваш процесс может быть постоянным. Вы можете использовать это для получения преимуществ по скорости в своем приложении, например, вы можете кэшировать данные базы данных в своем текущем процессе. По сути, вы меняете свое приложение на свой собственный сервер приложений, работающий за шлюзом FastCGI, предоставляемым веб-сервером.

Идея состоит в том, чтобы выяснить, как сделать средства обработки вашего приложения применимыми к шлюзу FastCGI. Используете ли вы какие-либо специфичные для mod-perl функции? Если это так, отойти от этого. Если нет, то просто начните работать через FastCGI. У вас есть преимущество в том, что для Perl есть интерфейсы FastCGI. Я предполагаю, что вы используете какую-то систему контроля версий, поэтому просто создайте ветку, предназначенную для портирования на FastCGI. Затем просто начните думать о POST и PUT как чтение со стандартного ввода и ответы вашего приложения, как запись на стандартный вывод.

Возможно, вы захотите также просто прочитать библиотеку, которая реализует интерфейс FastCGI для приложения. Вы можете найти некоторые из них по адресу fastcgi.com. Это может помочь вам понять, что ваше приложение будет делать по-другому в отношении того, что он делает в настоящее время.

Удачи вам!

2

Из быстрого просмотра документов CPAN это выглядит как CGI :: Fast - это обертка вокруг FCGI; от CGI :: Fast страница:

Для того, чтобы использовать CGI :: Fast вам понадобится модуль FCGI

Мое мнение, что это в принципе позволяет использовать стандартную функциональность CGI .pm со скоростными преимуществами FastCGI (создание заголовков и доступ к параметрам являются основными аспектами CGI.pm, которые вы, вероятно, уже используете).

Я не использовал ни один из них, это то, что мне кажется из документации, поэтому я вполне мог ошибаться.

Смежные вопросы