Автор Тема: проблема с mod_perl и текущей директорией (и может с чем-то ещё)  (Прочитано 7162 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн D.O.

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 81
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.liveinternet.ru/users/info101
Кратко:
Как заставить 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 считать текущей директорией ту, в которой лежит скрипт, который сейчас исполняется?
Доска объявлений

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
подрихтовать @INC?

Оффлайн D.O.

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 81
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.liveinternet.ru/users/info101
Я не знаю, какой каталог для него становится текущим, чтобы доавить его в @INC.
А главное, это не решит проблемы с открытием файлов (не модулей) из скриптов.
Доска объявлений

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
а что, модули зависят от месторасположения?

SCRIPT_FILENAME не то?

Оффлайн D.O.

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 81
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.liveinternet.ru/users/info101
Цитировать

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


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

В любом случае, придётся RTFM mod_perl.
Доска объявлений

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Цитировать
Как заставить mod_perl считать текущей директорией ту, в которой лежит скрипт, который сейчас исполняется?

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

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

mod_perl != cgi perl
« Последнее редактирование: 09 Ноября 2006, 18:59:10 от ondr »
0 OK, 0:1

Оффлайн D.O.

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 81
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.liveinternet.ru/users/info101
А вообще, писать скрипты, одинаково работающие под Perl (в CGI) и под mod_perl, - это несложная задача или большой гемор?

То есть, стоит писать универсальные скрипты или лучше делать отдельные версии для Perl и mod_perl?
Доска объявлений

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
нет, это несложно.
настоящие проблемы начинаются с mod_perl2. хотя.. уже много времени прошло, возможно его смогли "довести до ума". я не в курсе

а стоит или не стоит, это вопрос скорее к цели проекта
0 OK, 0:1

Оффлайн D.O.

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 81
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.liveinternet.ru/users/info101
Как раз с ним мне долбиться и предстоит.
Версия - "mod_perl2-2.0.2_1,3" (имя порта под FreeBSD).

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28