Как я могу перенести код Perl из mod_perl в FastCGI?
У нас есть существующее приложение Perl, которое поддерживает mod_perl
, Однако наш новый хост (Dreamhost) не поддерживает mod_perl, только FastCGI; таким образом, требуя порт.
Существующий код не использует никаких специфических вещей для Apache и представляет собой обычный код на Perl, написанный так, что mod_perl
,
Читая документацию и интерактивные учебные пособия, выясняется, что добавление поддержки FastCGI включает в себя оборачивание существующего кода внутри определенного вида цикла. Ниже приведен наиболее распространенный код скелета:
А. Использование FCGI
use FCGI;
while (FCGI::accept >= 0)
{
#Run existing code.
}
Б. Использование CGI::Fast
use CGI::Fast
while (my $cgi = CGI::Fast->new())
{
#Run existing code.
}
Подразделы: Вопросы
- Являются ли методы A и B эквивалентными способами добавления поддержки FastCGI?
- Если А и В разные, каковы плюсы и минусы использования одного над другим?
- Существуют ли какие-либо передовые практики или ошибки, о которых следует знать при переносе с
mod_perl
в FastCGI?
Благодарю.
2 ответа
Вообще говоря, приложение FastCGI очень похоже на CGI. Основное отличие состоит в том, что вы можете воспользоваться тем, что ваш процесс может быть постоянным. Вы можете использовать это, чтобы получить преимущества в скорости в вашем приложении - например, вы можете кэшировать данные базы данных в вашем рабочем процессе. По сути, вы превращаете свое приложение в собственный сервер приложений, работающий за шлюзом FastCGI, предоставляемым веб-сервером.
Идея состоит в том, чтобы выяснить, как сделать средства обработки вашего приложения применимыми к шлюзу FastCGI. Используете ли вы какой-либо мод-специфичный функционал? Если так, отойди от этого. Если нет, то просто начните работать через FastCGI. У вас есть преимущество в том, что для Perl доступны интерфейсы FastCGI. Я предполагаю, что вы используете какую-то систему контроля версий, поэтому просто создайте ветку, которая предназначена для портирования на FastCGI. Затем просто начните думать о POST и PUT как о чтении из стандартного ввода, а ответы вашего приложения - как о записи в стандартный вывод.
Вы также можете просто прочитать библиотеку, которая реализует интерфейс FastCGI для приложения. Вы можете найти некоторые из них на http://www.fastcgi.com/. Это может помочь вам понять, что ваше приложение будет делать по-другому по сравнению с тем, что оно делает в настоящее время.
Удачи!
Если посмотреть на документы CPAN быстро, то получается, что CGI:: Fast - это оболочка для FCGI; из CGI:: Быстрая страница:
Для использования CGI:: Fast вам понадобится модуль FCGI
Я предполагаю, что он в основном позволяет вам использовать стандартную функциональность CGI.pm с быстрыми преимуществами FastCGI (создание заголовка и доступ к параметрам являются основными аспектами CGI.pm, которые вы, вероятно, уже используете).
Я не использовал ни один из них, это то, что мне кажется из документации, так что я могу ошибаться.