Forum Webscript.Ru
Программирование => Perl => Тема начата: 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
спасибо.
-
AnnA
Могу ошибаться, но если речь идет о FastCGI, то модуль Perl называется FCGI, но его одного мало, так как аще требуется установка модуля для сервера mod_fastcgi для Apache.
http://www.fastcgi.com/
-
Phoinix ага, вы не ошибаетесь. Так и есть. :) Все уже установлено, конечно же. И на рабочем и у хостера. т.к. поначалу test_fast.fcgi из документации и ругался на отсутствие FCGI.pm
Другими словами этот шаг позади и исходить нужно из того, что FastCGI полностью рабочий. :) Получается, что установлен-то он установлен, но я не знаю использую ли я его полностью и использую ли вообще. :)
Сомнения возникают потому, что локально на w2k "на глаз" разницы нет совершенно. А, если делаю замеры с помощью Бенчмарка - разница во времени... ну совсем незначительная или, в некоторых случаях, с FastCGI код обрабатывается даже медленее. Вот именно это меня и смущает. Мне кажется, что нужно где-то в конфигах апача прописать что-то еще.
Спасибо, за ответ. :)
а можно ли каким-либо образом проверить установлен ли mod_fastcgi у хостера?
-
Покажи конфиг Apache
-
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 сюда выкладывать. :) Он уж больно большой.
-
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
про опции - курить ман
о результатах запуска сервера доложить сюда
-
о результатах запуска сервера доложить сюда
:) будет исполнено, мастер.
спасибо. сейчас попробую - доложу.
---
скачала mod_fastcgi-2.4.2 Makefile.nt предлагает мне собрать mod_fastcgi.dll
а я не хочу. :(
мне ведь нужен именно mod_fastcgi.so
охо-хо. поищу на гугле.
-
AnnA
упс. у вас какая ОС?
-
AnnA:
Сомнения возникают потому, что локально на w2k "на глаз" разницы нет совершенно.
Windows 2000 ;)
плохо? не будет работать думаете?
все же соберу dll и попробую сделать так как вы написали. я еще нашла вот такую доку: http://www.fastcgi.com/mod_fastcgi/INSTALL
буду "курить" ее теперь. ;)
-
а все же - нельзя никак проверить установлен ли mod_fastcgi у хостера? а то я сейчас потрачу уйму времени и окажется, что все это зря. обидно.
-
AnnA:
Windows 2000
Понятно. Нужно ставить dll-ку
плохо? не будет работать думаете?
будет. уверен.
а все же - нельзя никак проверить установлен ли mod_fastcgi у хостера? а то я сейчас потрачу уйму времени и окажется, что все это зря. обидно.
Как вариант, спросить его об этом.
-
AnnA
а все же - нельзя никак проверить установлен ли mod_fastcgi у хостера?
Для этого у хостеров есть саппорт, куда нужно задавать вопросы, а вообще проверить его наличие можно пропробовав запустить скрипт на сервере с use FCGI;, т.к. данный модуль в одиночку бесполезен, хотя это не факт, что скрипты будут с ним работать даже при его наличии т.к. FastCGI настраивается под определенный хост.
-
А вот Chs\'ом писанная прога http://cgidrom.vov.ru/pi.zip которая показывает установленные модули
Опаньки (из результатов ее работы)
...
...
CGI::Carp
CGI::Cookie
CGI::Fast
CGI::Lite
...
...
-
Вот что я поняла:
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()
где-то я ошиблась. :(
-
Что-то типа такого у тебя есть в конфиге?
Options FollowSymlinks ExecCGI
Options +Includes
-
ой. и все равно! Спасибо всем откликнувшимся огромное! :)
без лишнего ехидства растолковали неумелой что к чему.
теперь-то тот вот вариант кода, что в самом первом моем посте - он намного быстрее работает действительно. даже "на глаз" заметно. ;)
-
Попробуй dll-ку.
Я ее у себя собрал - работает.
-
NeoNox спасибо! :chmok:
теперь:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
а в логе тоже самое.
-
NeoNox
извините пожалуйста. глупая я. :) нахимичила с путями. локально.
все работает! БОЛЬШОЕ СПАСИБО! ;)
-
ну, вот. теперь вообще запутано все.
вот что ответил саппорт на вопрос о 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);
-
AnnA напиши сюда адрес своего хостера. школьников понабирают блин :(
У тебя в конфиге апача есть
FastCgiServer твой/скрипт.fcgi -processes 2 ?
Это значит запустить два процесса которые будут обслуживать запросы.
Если они есть - можеш к хостеру больше не обращаться.
-
NeoNox не-а, нет у меня такого нигде
NeoNox:
FastCgiServer твой/скрипт.fcgi -processes 2 ?
он же у меня не один вовсе. ну твой/скрипт.fcgi
а где можно почитать про это. Вы и так уж возитесь со мной вон вторые сутки. даже неудобно как-то. :)
-
AnnA для тебя, как разработчика на Perl, должно стать правилом читать perldoc. В данном случае:
perldoc CGI::Fast . Он ответит на 95% твоих вопросов. Если что не понятно - спрашивай.
-
шутите? это первое, что я прочла. поверьте нет там ни одного словечка о FastCgiServer
это из доки к mod_fastcgi ;)
спасибо вам большое за помощь.
-
Мне больше нечего делать и я шучу со всеми посетителями этого форума.
И верить тебе, кстати, я тоже не собираюсь.
Делаем раз:
http://search.cpan.org/~lds/CGI.pm-3.05/CGI/Fast.pm
Делаем два:
смотрим оглавление и видим INSTALLING FASTCGI SCRIPTS
вот вам сюда и нужно.
Хотя я советую прочитать все от корки до корки.
-
День добрый.
Уже как третий день химичу с 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`ом... аналогичная история.
Подскажите, как установить?!
-
Pegaz:
что означает, что фаст цги неработает. Или я не так понял?
ага. :) не работает.
смотрите лог ошибок сервера: когда он работает - пишет о том, что мол стартовал такой-то с таким-то пидом и ждет столько-то процессов.
если этого нет - не работает.
откуда вы скачивали
Pegaz:
Скачанная дллка mod_fastcgi.dll версии 2.4.0
В httpd.conf какие расширения связаны с fcgi?
и вот это
Pegaz:
AddModule mod_fastcgi.c
я бы убрала. конечно, если у вас действительно есть mod_fastcgi.c - то следует оставить.
а у вас какая ОС?
-
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 - не работает почемуто =)