Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> mod_perl и use из текущей директории. 
:(
    Опции темы
GePo
Дата 8.2.2008, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 30.3.2003
Где: Москва

Репутация: нет
Всего: 3



Никак не пойму в чем дело:
Настроена Apache2+mod_perl2. Есть два файла - script.pl, Conf.pm. В script.pl делается use Conf;
Если Conf.pm лежит в одной директории с script.pl, то при вызове script.pl (через HTTP запрос) выскакивает Internal Server Error и в логи пишется следующее:

Код

Can't locate Conf.pm in @INC (@INC contains: . /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl . /etc/apache2) at /var/www/facs/script.pl line 6.\nBEGIN failed--compilation aborted at /var/www/facs/script.pl line 6.\n


обратите внимамение, точка включена в @INC ;-)

Если я копирую Conf.pm в /usr/local/share/perl/5.8.8/ то все работает на ура.

Конфиг perl в апаче выглядит так:
Код

PerlModule ModPerl::Registry

<Files *.pl>
    AddHandler perl-script *.pl
    PerlSendHeader On
    PerlHandler ModPerl::Registry

    Options +ExecCGI
</Files>


Можно как-нибудь сделать так, чтобы все работало, если Conf.pm находится в той же директрии, что и script.pl?
--------------------
PM MAIL WWW   Вверх
ginnie
Дата 9.2.2008, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



Уважаемый GePo, почитайте документацию. Обратите внимание на use lib, лучше явно указать путь к модулям и не рассчитывать на .


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
GePo
Дата 9.2.2008, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 30.3.2003
Где: Москва

Репутация: нет
Всего: 3



Неужели нет способа не указывать абсолютный путь. Это я читал, но переспектива указывать полный путь к скрипту совсем не радует.
--------------------
PM MAIL WWW   Вверх
ginnie
Дата 9.2.2008, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



GePo, т.к. "." в @INC есть, а модуль не находится, следовательно текущей является не директория, в которой расположен script.pl (это легко проверить в скрипте). Вариантов решения два: первый Вы уже попробовали - разместить Conf.pm в одной из папок, перечисленных в @INC. Второй вариант - добавить в @INC папку, в которой расположены script.pl и Conf.pm. Добавлять можно тоже двумя способами: на первый я уже указал - явно добавлять полный путь в файле конфигурации Apache, второй способ - в script.pl получать полный путь, добавлять его в @INC, после этого загружать Conf.pm.

P.S. GePo, чем Вас так не радует указание полного пути к директории с Conf.pm? Меня и моих коллег такой подход вполне устраивает.

Это сообщение отредактировал(а) ginnie - 9.2.2008, 22:05


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
tishaishii
Дата 14.2.2008, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



А у меня некоторое время работало в конфиге 
Код
PerlSwitches -I "lib/Modules"

Потом неведомо что поменялось и перестало работать.

А указание полного пути добавляет ненужного узнавания его (писанины). Да и вообще, пути бывают абсолютными и относительными, и вдруг одного не стало. Не порядок.
PM MAIL ICQ Skype   Вверх
BlackLFL
Дата 2.4.2008, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 15.9.2005
Где: Москва

Репутация: 3
Всего: 12



2GePo, попробуйте так
Код

#!/usr/bin/perl

BEGIN 
{
    chdir( ( $ENV{'SCRIPT_FILENAME'} =~ /(.+)\/[^\/]*$/ ) );
    # либо воспользуйтесь модулем CWD
}

use Conf;


2tishaishii, расскажи поподробнее, после чего перестал отрабатывать PerlSwitches?

Это сообщение отредактировал(а) BlackLFL - 2.4.2008, 13:40
PM WWW   Вверх
ginnie
Дата 2.4.2008, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



Уважаемый BlackLFL, Вы уверены, что $ENV{'SCRIPT_FILENAME'} будет определена, если скрипт будет компилироваться при запуске Apache?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
BlackLFL
Дата 2.4.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 15.9.2005
Где: Москва

Репутация: 3
Всего: 12



Цитата(ginnie @ 2.4.2008,  14:40)
Уважаемый BlackLFL, Вы уверены, что $ENV{'SCRIPT_FILENAME'} будет определена, если скрипт будет компилироваться при запуске Apache?

да уверен.

Добавлено через 58 секунд
проверял неоднократно под apache 1.3, 2.0, 2.2, с mod_perl и без него.
PM WWW   Вверх
BlackLFL
Дата 2.4.2008, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 15.9.2005
Где: Москва

Репутация: 3
Всего: 12



к сожалению, мое утверждение "да уверен", неверно, ginnie имел ввиду, будет ли доступен хэш %ENV в скрипте при загрузке сервере Apache, например, через директиву PerlRequire в файле httpd.conf.

В данном случае хэш %ENV действительно не будет доступен, но автору это не повредит, т.к. работа с файлом происходит после загрузки сервера.
PM WWW   Вверх
tishaishii
Дата 5.4.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Код

<Perl>
#И пышы что тебе надо в конфиге апачи.
# $ErrorLog='/var/log/apache2/error'
# $Location->{'/perl'}={
   $PerlHandler=>ModPerl::RegistryBB
};
</Perl>

PM MAIL ICQ Skype   Вверх
tolkien
Дата 7.4.2008, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: нет
Всего: 4



Такая дериктова абсолютно ясно говорит где еще искать модули PERL кроме стандартной деректории.
use lib qw(.); 

Если она не работает, а такое вполне возможно. То значит PERL на серваке обрезанный. С ограничениями.  Или сам PERL не корректно работает. 


PM MAIL   Вверх
ginnie
Дата 7.4.2008, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



Уважаемый tolkien, не могли бы Вы внести ясность по поводу того, что такое "стандартная деректория" и где именно ищутся модули при использовании указанной Вами директивы?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
tolkien
Дата 7.4.2008, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: нет
Всего: 4



стандартные директории это те что были созданы при установки PERL 

F:\Perl\lib
F:\Perl\site\lib

когда подключаешь модуль

use URI;

PERL Начинает искать его в этих директориях

В добавок к ним можно подключить еще директории в которых нужно вести поиск. Это делается директивой 

use lib gw(путь_к_каталогу);

. - точка означает текущий с исполняемым скриптом каталог

Если исполняемый скрипт у тебя лежит в каталоге F:\Apache\cgi-bin\ то тогда здесь еще будет идти поиск модулей



Это сообщение отредактировал(а) tolkien - 7.4.2008, 18:19
PM MAIL   Вверх
ginnie
Дата 7.4.2008, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



Уважаемый tolkien, конкретизирую вопрос:

в httpd.conf пишем

Код

<Perl>
    require F:\Apache\cgi-bin\test.pl
</Perl>


В файле F:\Apache\cgi-bin\test.pl пишем 

Код

use lib qw(.);


(хотя она и так всегда там есть   smile)

Теперь вопрос: какой, по вашему, путь скрывается за '.'?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
tolkien
Дата 7.4.2008, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: нет
Всего: 4



Все что я выше писал. Относится к CGI программированию. А не ко всяким извращениям. Вроде включений скриптов в конфиг апач.




PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.1013 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.