Forum Webscript.Ru

Программирование => Perl => Тема начата: AnnA от 12 Мая 2004, 11:56:03

Название: работа с FastCGI
Отправлено: AnnA от 12 Мая 2004, 11:56:03
Доброго времени суток. :)
создаем самый обычный script.cgi и из него работаем с модулем:

#!/usr/bin/perl -wT

use strict;
use warnings; #это убираем, когда скрипт уже готов/отлажен и уходит в работу
use Socket;
use Fcntl \':flock\'; # import LOCK_* constants
use CGI::Fast;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser set_message);
set_message("здесь просто сообщения ошибок");
use vars qw(объявляем много-много переменных, массивов и хэшей);

use POSIX;
POSIX::setlocale (&POSIX::LC_CTYPE, "ru");
use locale;

my $handling_request = 0;
my $exit_requested = 0;
my $request = FCGI::Request();

while ($handling_request = ($request->Accept() >= 0)) {

    &do_request;
    $handling_request = 0;
    last if $exit_requested;
}

sub do_request() { весь работающий код
...............
...............

$request->Finish();
} # EO sub do_request()
$request->Finish();
exit(0);


Правильно ли это? Или правильнее все же было бы делать script.fcgi, не подключать в теле скрипта use CGI::Fast; уповая на то, что он каким-то чудесным образом сам подключится и все сделает как надо? Не думаю, что для этого достаточно просто прописать нечто вроде AddHandler cgi-script .cgi .fcgi в корневом .htaccess

спасибо.
Название: работа с FastCGI
Отправлено: Phoinix от 12 Мая 2004, 12:23:32
AnnA

Могу ошибаться, но если речь идет о FastCGI, то модуль Perl называется FCGI, но его одного мало, так как аще требуется установка модуля для сервера mod_fastcgi для Apache.

http://www.fastcgi.com/
Название: работа с FastCGI
Отправлено: AnnA от 12 Мая 2004, 12:56:53
Phoinix ага, вы не ошибаетесь. Так и есть. :) Все уже установлено, конечно же. И на рабочем и у хостера. т.к. поначалу test_fast.fcgi из документации и ругался на отсутствие FCGI.pm
Другими словами этот шаг позади и исходить нужно из того, что FastCGI полностью рабочий. :) Получается, что установлен-то он установлен, но я не знаю использую ли я его полностью и использую ли вообще. :)
Сомнения возникают потому, что локально на w2k "на глаз" разницы нет совершенно. А, если делаю замеры с помощью Бенчмарка - разница во времени... ну совсем незначительная или, в некоторых случаях, с FastCGI код обрабатывается даже медленее. Вот именно это меня и смущает. Мне кажется, что нужно где-то в конфигах апача прописать что-то еще.
Спасибо, за ответ. :)
а можно ли каким-либо образом проверить установлен ли mod_fastcgi у хостера?
Название: работа с FastCGI
Отправлено: NeoNox от 12 Мая 2004, 13:11:26
Покажи конфиг Apache
Название: работа с FastCGI
Отправлено: AnnA от 12 Мая 2004, 14:04:48
Apache 1.3.20

\\usr\\local\\Apache\\conf\\httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so

все остальные LoadModule закомментированы

AddHandler cgi-script .cgi .pl .fcg .fcgi

или что конкретно вас интересует? не могу же я весь httpd.conf сюда выкладывать. :) Он уж больно большой.
Название: работа с FastCGI
Отправлено: NeoNox от 12 Мая 2004, 14:12:38
AnnA стоит почитать документацию.
делаем раз:
AddHandler cgi-script .cgi
AddHandler fastcgi-script .fcgi
делаем два:
LoadModule fastcgi_module    путь где у тебя лежит/mod_fastcgi.so
делаем три:
FastCgiServer /путь к скрипту(полный!)/script.fcgi -listen-queue-depth 50 -processes 2 -idle-timeout 300 -flush
про опции - курить ман
о результатах запуска сервера доложить сюда
Название: работа с FastCGI
Отправлено: AnnA от 12 Мая 2004, 14:34:24
Цитировать
о результатах запуска сервера доложить сюда

:) будет исполнено, мастер.
спасибо. сейчас попробую - доложу.
---
скачала mod_fastcgi-2.4.2 Makefile.nt предлагает мне собрать mod_fastcgi.dll
а я не хочу. :(
мне ведь нужен именно mod_fastcgi.so
охо-хо. поищу на гугле.
Название: работа с FastCGI
Отправлено: NeoNox от 12 Мая 2004, 14:50:22
AnnA
упс. у вас какая ОС?
Название: работа с FastCGI
Отправлено: AnnA от 12 Мая 2004, 14:58:40
Цитировать
AnnA:
Сомнения возникают потому, что локально на w2k "на глаз" разницы нет совершенно.
Windows 2000 ;)
плохо? не будет работать думаете?
все же соберу dll и попробую сделать так как вы написали. я еще нашла вот такую доку: http://www.fastcgi.com/mod_fastcgi/INSTALL
буду "курить" ее теперь. ;)
Название: работа с FastCGI
Отправлено: AnnA от 12 Мая 2004, 15:00:50
а все же - нельзя никак проверить установлен ли mod_fastcgi у хостера? а то я сейчас потрачу уйму времени и окажется, что все это зря. обидно.
Название: работа с FastCGI
Отправлено: NeoNox от 12 Мая 2004, 15:25:05
Цитировать
AnnA:
Windows 2000

Понятно.  Нужно ставить dll-ку
Цитировать

плохо? не будет работать думаете?

будет. уверен.
Цитировать

а все же - нельзя никак проверить установлен ли mod_fastcgi у хостера? а то я сейчас потрачу уйму времени и окажется, что все это зря. обидно.

Как вариант, спросить его об этом.
Название: работа с FastCGI
Отправлено: Phoinix от 12 Мая 2004, 15:32:48
AnnA
Цитировать
а все же - нельзя никак проверить установлен ли mod_fastcgi у хостера?


Для этого у хостеров есть саппорт, куда нужно задавать вопросы, а вообще проверить его наличие можно пропробовав запустить скрипт на сервере с use FCGI;, т.к. данный модуль в одиночку бесполезен, хотя это не факт, что скрипты будут с ним работать даже при его наличии т.к. FastCGI настраивается под определенный хост.
Название: работа с FastCGI
Отправлено: Mog. от 12 Мая 2004, 15:54:30
А вот Chs\'ом писанная прога http://cgidrom.vov.ru/pi.zip которая показывает установленные модули
Опаньки (из результатов ее работы)
...
...
CGI::Carp
CGI::Cookie
CGI::Fast
CGI::Lite
...
...
Название: работа с FastCGI
Отправлено: AnnA от 12 Мая 2004, 17:53:09
Вот что я поняла:
1. Проверить существование mod_fastcgi для Apache у хостера невозможно. Разве только спросить... /очень сомнительная проверка, согласитесь/.
2. Работа скрипта ft.fcgi:#!/usr/bin/perl -Tw

use CGI::Fast qw(:standard);
    $COUNTER = 0;
    while (new CGI::Fast) {
        print header;
        print start_html("Fast CGI Rocks");
        print
            h1("Fast CGI Rocks"),
            "Invocation number ",b($COUNTER++),
            " PID ",b($$),".",
            hr;
        print end_html;
    }
далеко не означает, что модуль-таки установлен на хостинге
3.
Цитировать
NeoNox:
Понятно. Нужно ставить dll-ку

но ведь у меня прекрасно работает
Цитировать
AnnA:
LoadModule rewrite_module modules/mod_rewrite.so

4. Хорошо. нужно - поставила.
httpd.conf:
#AddModule mod_fastcgi.c
LoadModule fastcgi_module modules/mod_fastcgi.dll

#SetHandler fastcgi-script
AddHandler fastcgi-script .fcg .fcgi .fpl
AddHandler cgi-script .cgi .pl

А теперь, когда запускаю вот тот скрипт проверки (см. выше):
Forbidden
You don\'t have permission to access /my/ft.fcgi on this server.
и лог пишет:
FastCGI: invalid (dynamic) server "d:/home/..../ft.fcgi": script not found or unable to stat()
где-то я ошиблась. :(
Название: работа с FastCGI
Отправлено: NeoNox от 12 Мая 2004, 17:58:59
Что-то типа такого у тебя есть в конфиге?

   Options FollowSymlinks ExecCGI
   Options +Includes
Название: работа с FastCGI
Отправлено: AnnA от 12 Мая 2004, 18:01:07
ой. и все равно! Спасибо всем откликнувшимся огромное! :)
без лишнего ехидства растолковали неумелой что к чему.
теперь-то тот вот вариант кода, что в самом первом моем посте - он намного быстрее работает действительно. даже "на глаз" заметно. ;)
Название: работа с FastCGI
Отправлено: NeoNox от 12 Мая 2004, 18:01:46
Попробуй dll-ку.
Я ее у себя собрал - работает.
Название: работа с FastCGI
Отправлено: AnnA от 12 Мая 2004, 18:12:08
NeoNox спасибо! :chmok:
теперь:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
а в логе тоже самое.
Название: работа с FastCGI
Отправлено: AnnA от 12 Мая 2004, 18:23:59
NeoNox
извините пожалуйста. глупая я. :) нахимичила с путями. локально.
все работает! БОЛЬШОЕ СПАСИБО! ;)
Название: работа с FastCGI
Отправлено: AnnA от 12 Мая 2004, 19:19:02
ну, вот. теперь вообще запутано все.
вот что ответил саппорт на вопрос о mod_fastcgi:
=========
 Нет, не установлен.
но у нас установлен perl-модуль CGI::Fast
=========
и как теперь с этим жить? :)
это надо расценивать, как намек пользоваться в скриптах этой вот конструкцией:
my $handling_request = 0;
my $exit_requested = 0;
my $request = FCGI::Request();

while ($handling_request = ($request->Accept() >= 0)) {

    &do_request;
    $handling_request = 0;
    last if $exit_requested;
}

sub do_request() { весь работающий код
...............
...............

$request->Finish();
} # EO sub do_request()
$request->Finish();
exit(0);
Название: работа с FastCGI
Отправлено: NeoNox от 12 Мая 2004, 19:30:01
AnnA напиши сюда адрес своего хостера. школьников понабирают блин :(
У тебя в конфиге апача есть
FastCgiServer твой/скрипт.fcgi -processes 2 ?
Это значит запустить два процесса которые будут обслуживать запросы.
Если они есть - можеш к хостеру больше не обращаться.
Название: работа с FastCGI
Отправлено: AnnA от 13 Мая 2004, 11:55:24
NeoNox не-а, нет у меня такого нигде
Цитировать
NeoNox:
FastCgiServer твой/скрипт.fcgi -processes 2 ?

он же у меня не один вовсе. ну твой/скрипт.fcgi
а где можно почитать про это. Вы и так уж возитесь со мной вон вторые сутки. даже неудобно как-то. :)
Название: работа с FastCGI
Отправлено: NeoNox от 13 Мая 2004, 12:14:10
AnnA для тебя, как разработчика на Perl, должно стать правилом читать perldoc. В данном случае:
perldoc CGI::Fast . Он ответит на 95% твоих вопросов. Если что не понятно - спрашивай.
Название: работа с FastCGI
Отправлено: AnnA от 13 Мая 2004, 12:33:38
шутите? это первое, что я прочла. поверьте нет там ни одного словечка о FastCgiServer
это из доки к mod_fastcgi ;)
спасибо вам большое за помощь.
Название: работа с FastCGI
Отправлено: NeoNox от 13 Мая 2004, 12:54:46
Мне больше нечего делать и я шучу со всеми посетителями этого форума.
И верить тебе, кстати, я тоже не собираюсь.
Делаем раз:
http://search.cpan.org/~lds/CGI.pm-3.05/CGI/Fast.pm
Делаем два:
смотрим оглавление и видим INSTALLING FASTCGI SCRIPTS
вот вам сюда и нужно.
Хотя я советую прочитать все от корки до корки.
Название: работа с FastCGI
Отправлено: Pegaz от 08 Октября 2005, 08:52:39
День добрый.
Уже как третий день химичу с mod_fastcgi. Ничего не получается. Вот только не пойму из-за чего... толи из-за кривости рук, толи из-за чевото другого...)
Суть проблемы:
Есть апача версии 1.3.27. Есть Скачанная дллка mod_fastcgi.dll версии 2.4.0
Когда запускаю апачу, она пишет, что мол запущена апача такойто версии и mod_fastcgi с указанием версии.
Но при запуске скрипта(код его приведу ниже), видно, что фастцги не работает(

В httpd.conf внёс следующие изменения:
LoadModule fastcgi_module modules/mod_fastcgi.dll
[I]ClearModuleList[/I]
AddModule mod_fastcgi.c

ClearModuleList - уже было, просто написал, чтобы показать, что она есть)

Скрипт:

#!/usr/bin/perl
use CGI::Fast qw(:standard);
    $COUNTER = 0;

    while (new CGI::Fast) {
        print header;
        print start_html("Fast CGI Rocks");
        print
            h1("Fast CGI Rocks"),
            "Invocation number ",b($COUNTER++),
            " PID ",b($$),".",
            hr;
        print end_html;
        $COUNTER++;
    }


Скрипт выдает чтото примерно такое:
Fast CGI Rocks
Invocation number 0 PID 2304.

PID - при каждом новом запуске меняется, а вот первое число всегда равно нулю, что означает, что фаст цги неработает. Или я не так понял?

Так же пробовал устанавливать дллку выложенную NeoNox`ом... аналогичная история.

Подскажите, как установить?!
Название: работа с FastCGI
Отправлено: AnnA от 10 Октября 2005, 11:34:15
Цитировать
Pegaz:
что означает, что фаст цги неработает. Или я не так понял?

ага. :) не работает.
смотрите лог ошибок сервера: когда он работает - пишет о том, что мол стартовал такой-то с таким-то пидом и ждет столько-то процессов.
если этого нет - не работает.
откуда вы скачивали
Цитировать
Pegaz:
Скачанная дллка mod_fastcgi.dll версии 2.4.0

В httpd.conf какие расширения связаны с fcgi?
и вот это
Цитировать
Pegaz:
AddModule mod_fastcgi.c

я бы убрала. конечно, если у вас действительно есть mod_fastcgi.c - то следует оставить.
а у вас какая ОС?
Название: работа с FastCGI
Отправлено: Pegaz от 10 Октября 2005, 13:10:15
AnnA
Уся - пасибо - разобрался. Удалил в конфиге апача всё что до этого было связано с фастцги и добавил -

LoadModule fastcgi_module modules/mod_fastcgi.dll


    Alias /fcgi-bin/ /sait/fcgi-bin/
   
        SetHandler fastcgi-script
        Options +ExecCGI
   

    AddHandler fastcgi-script .fcgi .fpl

ClearModuleList
...другие модули
AddModule mod_fastcgi.c


Всё заработало.
А без AddModule mod_fastcgi.c - не работает почемуто =)