Apache::Registry и CGI скрипты на perl
| |
|
Apache::Registry
- это модуль для web сервера apache.
Его назначение - дать возможность запускать CGI скрипты, написанные на языке perl,
из mod_perl без внесения существенных
изменений в их код.
Скрипты, предназначенные для работы под
Apache::Registry, должны находиться к каталоге pcgi/ или любом его
подкаталоге, иметь права доступа rwxr-x--- (750) и отвечать всем прочим требованием к
собственному cgi скрипту клиента на языке perl на нашем хостинге.
Обращение к скрипту производится по схеме http://domain_name/pcgi/your-script.pl
При обращении к url вида /pcgi/your-script.pl происходит
компиляция и исполнение соответствующего скрипта. Скомпилированный скрипт
при этом сохраняется в памяти процесса web сервера, который обработал
запрос. Последующие обращения не требуют компиляции и и связанных с ней затрат
времени и потому происходят заметно быстрее.
Перекомпиляция производится только в том случае, если скрипт был изменен.
При обычном вызове CGI скрипта на каждый запрос запускается
отдельный процесс интерпретатора perl. После обработки запроса
процесс завершается, автоматически освобождается память, закрываются
открытые файлы, и т.д.
Если скрипт исполняется модулем Apache::Registry,
ситуация иная - интерпретатор perl является частью веб сервера,
отдельный процесс не запускается, веб сервер хранит в памяти
скомпилированный однажды скрипт и все его данные.
Поэтому программирование требует соблюдения некоторых
дополнительных правил и аккуратности.
Рекомендуется всегда использовать ключ -w интерпретатора perl
и директиву use strict. То есть, скрипт должен начинаться следующими строками:
#!/usr/bin/perl -w
use strict;
о том, что означает ключ -w и use strict см. в perldoc perlrun и perlmodlib.
Скрипт не может (не должен) обращаться к namespace main.
Скрипт не может содержать __END__ и __DATA__.
На стадии отладки скрипта крайне рекомендуется включить ведение error_log
и обращать внимание на то, что в него попадает.
В самом скрипте можно установить переменную
$Apache::Registry::Debug = 1;
для записи сообщения о каждой перекомпиляции в error_log.
Для работы с базами данных вместо модуля DBI стоит применять
Apache::DBI, который имеет тот же интерфейс (менять что либо в коде не
требуется), но при этом реализует постоянные соединения с базой данных.
Таким образом можно еще более ускорить выполнение скрипта,
сэкономив время на установке соединения.
Использование Apache::Registry и Apache::DBI позволяет увеличить пиковую
скорость обработки запросов в 10-50 раз. Небольшие и простые скрипты,
которые вызываются часто (например, скрипты баннерных систем),
скрипты, которые используются в SSI (по несколько
cgi скриптов для формирования одной страницы) имеет смысл перевести под
Apache::Registry в первую очередь.
Для тарифов "Рабочий"
и "Деловой" mod_perl по умолчанию выключен, чтобы при
работе сервера не загружались лишние модули, если Вы их не используете. Если
же Вы хотите включить mod_perl, то это
необходимо сделать на Сервере Статистики, авторизовавшись с Управляющим для
договора или техническим логином и соответствующим паролем, в разделе
"www.domain" - "Управление услугой".
Для тарифа "Профессионал"
загрузку mod_perl обеспечивают следующие строки в файле конфигурации Apache:
LoadModule perl_module /www/libexec/libperl.so
AddModule mod_perl.c
Дополнительную информацию можно найти по адресу
http://perl.apache.org/#docs.
Рекомендуется прочитать perldoc cgi_to_mod_perl,
mod_perl_traps,
Apache::Registry,
mod_perl.