Forum Webscript.Ru

Программирование => Perl => Тема начата: D.O. от 07 Ноября 2006, 00:00:09

Название: проблема с mod_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 считать текущей директорией ту, в которой лежит скрипт, который сейчас исполняется?
Название: проблема с mod_perl и текущей директорией (и может с чем-то ещё)
Отправлено: arto от 07 Ноября 2006, 01:23:30
подрихтовать @INC?
Название: проблема с mod_perl и текущей директорией (и может с чем-то ещё)
Отправлено: D.O. от 07 Ноября 2006, 01:56:21
Я не знаю, какой каталог для него становится текущим, чтобы доавить его в @INC.
А главное, это не решит проблемы с открытием файлов (не модулей) из скриптов.
Название: проблема с mod_perl и текущей директорией (и может с чем-то ещё)
Отправлено: arto от 07 Ноября 2006, 02:18:06
а что, модули зависят от месторасположения?

SCRIPT_FILENAME не то?
Название: проблема с mod_perl и текущей директорией (и может с чем-то ещё)
Отправлено: D.O. от 07 Ноября 2006, 02:20:16
Цитировать

arto:
а что, модули зависят от месторасположения?
SCRIPT_FILENAME не то?


Не понял, в чём вопрос.
Вообще, все скрипты давно и успешно работают в обычном режиме CGI.
Проблема появилась только при попытке перехода на mod_perl.

В любом случае, придётся RTFM mod_perl.
Название: проблема с mod_perl и текущей директорией (и может с чем-то ещё)
Отправлено: ondr от 09 Ноября 2006, 18:52:55
Цитировать
Как заставить mod_perl считать текущей директорией ту, в которой лежит скрипт, который сейчас исполняется?

этого "лучше" не делать,
используй абсолютные пути

Цитировать
Вообще, все скрипты давно и успешно работают в обычном режиме CGI.
Проблема появилась только при попытке перехода на mod_perl.

mod_perl != cgi perl
Название: проблема с mod_perl и текущей директорией (и может с чем-то ещё)
Отправлено: D.O. от 09 Ноября 2006, 19:02:41
А вообще, писать скрипты, одинаково работающие под Perl (в CGI) и под mod_perl, - это несложная задача или большой гемор?

То есть, стоит писать универсальные скрипты или лучше делать отдельные версии для Perl и mod_perl?
Название: проблема с mod_perl и текущей директорией (и может с чем-то ещё)
Отправлено: ondr от 09 Ноября 2006, 22:15:41
нет, это несложно.
настоящие проблемы начинаются с mod_perl2. хотя.. уже много времени прошло, возможно его смогли "довести до ума". я не в курсе

а стоит или не стоит, это вопрос скорее к цели проекта
Название: проблема с mod_perl и текущей директорией (и может с чем-то ещё)
Отправлено: D.O. от 09 Ноября 2006, 22:24:06
Как раз с ним мне долбиться и предстоит.
Версия - "mod_perl2-2.0.2_1,3" (имя порта под FreeBSD).

А цель - чтобы быстро всё работало. Есть некий сайт, работавщий на виртуальном хостинге, где нет mod_perl. Посещаемость стала большой, пришлось переезжать на VDS, чтобы можно было поставить mod_perl, чтобы не тратить время на компиляцию CGI-скриптов при каждом запросе.