Как я могу перенести Perl-код из mod_perl в FastCGI? - PullRequest
5 голосов
/ 20 марта 2009

У нас есть существующее приложение Perl, которое поддерживает mod_perl. Однако наш новый хост (Dreamhost) не поддерживает 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. Есть ли какие-либо передовые практики или ошибки, о которых следует знать при портировании с mod_perl на FastCGI?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 20 марта 2009

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

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

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

Удачи!

2 голосов
/ 20 марта 2009

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

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

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

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

...