Forum Webscript.Ru
Программирование => Perl => Тема начата: D.O. от 07 Ноября 2006, 00:00:09
-
Кратко:
Как заставить mod_perl считать текущей директорией ту, в которой лежит скрипт, который сейчас исполняется?
Подробно:
У меня на локальной машине под Windows стоит набор из Perl и Apache с включённым mod_perl (который
отсюда: http://ftp://theoryx5.uwinnipeg.ca/pub/other/).
Я попробовал задействовать mod_perl н алокальном сайте.
Сделал как в этой инструкции:
http://library.mnwhost.ru/webdev/perl/mod_perl.php
--- фрагмент инструкции - начало ---
Для этого мы изменяем httpd.conf:
# Это мы закомментируем
#### ScriptAlias /cgi-bin/ "/home/my-project.ru/cgi-bin/"
# А это добавим
PerlModule Apache::Registry
SetHandler perl-script
PerlHandler Apache::Registry
Options ExecCGI
allow from all
--- фрагмент инструкции - конец ---
В результате CGI-скрипты стало невозможно исполнять: получаю error 403.
Раскомментирую строчку (несмотря на инструкцию):
ScriptAlias /cgi-bin/ "/home/my-project.ru/cgi-bin/"
(путь, естественно, другой)
Уже лучше: error 500.
В логах пишется:
--- log - start ---
[Mon Nov 06 23:11:21 2006] [error] Can\'t locate DBOperations.pm in @INC (@INC contains: c:/perl_dev/Perl/lib c:/perl_dev/Perl/site/lib . c:/perl_dev/apache/ c:/
perl_dev/apache/lib/perl) at c:/perl_dev/apache/cgi-bin/rp/section.pl line 8.
BEGIN failed--compilation aborted at c:/perl_dev/apache/cgi-bin/rp/section.pl line 8.
--- log - start ---
Без mod_perl всё работает. То есть mod_perl как-то меняет текущую директорию, и поэтому не находит мой модуль, лежащий в одной директории со скриптом. То есть текущей директорией оказывается не та директория, в которой лежит скрипт, который сейчас исполняется.
Это подтверждается ещё и тем, что скрипт не может открыть файл с шаблоном страницы, который находится с ним в одной директории.
Как заставить mod_perl считать текущей директорией ту, в которой лежит скрипт, который сейчас исполняется?
-
подрихтовать @INC?
-
Я не знаю, какой каталог для него становится текущим, чтобы доавить его в @INC.
А главное, это не решит проблемы с открытием файлов (не модулей) из скриптов.
-
а что, модули зависят от месторасположения?
SCRIPT_FILENAME не то?
-
arto:
а что, модули зависят от месторасположения?
SCRIPT_FILENAME не то?
Не понял, в чём вопрос.
Вообще, все скрипты давно и успешно работают в обычном режиме CGI.
Проблема появилась только при попытке перехода на mod_perl.
В любом случае, придётся RTFM mod_perl.
-
Как заставить mod_perl считать текущей директорией ту, в которой лежит скрипт, который сейчас исполняется?
этого "лучше" не делать,
используй абсолютные пути
Вообще, все скрипты давно и успешно работают в обычном режиме CGI.
Проблема появилась только при попытке перехода на mod_perl.
mod_perl != cgi perl
-
А вообще, писать скрипты, одинаково работающие под Perl (в CGI) и под mod_perl, - это несложная задача или большой гемор?
То есть, стоит писать универсальные скрипты или лучше делать отдельные версии для Perl и mod_perl?
-
нет, это несложно.
настоящие проблемы начинаются с mod_perl2. хотя.. уже много времени прошло, возможно его смогли "довести до ума". я не в курсе
а стоит или не стоит, это вопрос скорее к цели проекта
-
Как раз с ним мне долбиться и предстоит.
Версия - "mod_perl2-2.0.2_1,3" (имя порта под FreeBSD).
А цель - чтобы быстро всё работало. Есть некий сайт, работавщий на виртуальном хостинге, где нет mod_perl. Посещаемость стала большой, пришлось переезжать на VDS, чтобы можно было поставить mod_perl, чтобы не тратить время на компиляцию CGI-скриптов при каждом запросе.