![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
GePo |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 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 и в логи пишется следующее:
обратите внимамение, точка включена в @INC ;-) Если я копирую Conf.pm в /usr/local/share/perl/5.8.8/ то все работает на ура. Конфиг perl в апаче выглядит так:
Можно как-нибудь сделать так, чтобы все работало, если Conf.pm находится в той же директрии, что и script.pl? --------------------
|
||||
|
|||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
Уважаемый GePo, почитайте документацию. Обратите внимание на use lib, лучше явно указать путь к модулям и не рассчитывать на .
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
GePo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 30.3.2003 Где: Москва Репутация: нет Всего: 3 |
Неужели нет способа не указывать абсолютный путь. Это я читал, но переспектива указывать полный путь к скрипту совсем не радует.
--------------------
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 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 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: нет Всего: 8 |
А у меня некоторое время работало в конфиге
Потом неведомо что поменялось и перестало работать. А указание полного пути добавляет ненужного узнавания его (писанины). Да и вообще, пути бывают абсолютными и относительными, и вдруг одного не стало. Не порядок. |
|||
|
||||
BlackLFL |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 15.9.2005 Где: Москва Репутация: 3 Всего: 12 |
2GePo, попробуйте так
2tishaishii, расскажи поподробнее, после чего перестал отрабатывать PerlSwitches? Это сообщение отредактировал(а) BlackLFL - 2.4.2008, 13:40 |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
Уважаемый BlackLFL, Вы уверены, что $ENV{'SCRIPT_FILENAME'} будет определена, если скрипт будет компилироваться при запуске Apache?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
BlackLFL |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 15.9.2005 Где: Москва Репутация: 3 Всего: 12 |
да уверен. Добавлено через 58 секунд проверял неоднократно под apache 1.3, 2.0, 2.2, с mod_perl и без него. |
|||
|
||||
BlackLFL |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 15.9.2005 Где: Москва Репутация: 3 Всего: 12 |
к сожалению, мое утверждение "да уверен", неверно, ginnie имел ввиду, будет ли доступен хэш %ENV в скрипте при загрузке сервере Apache, например, через директиву PerlRequire в файле httpd.conf.
В данном случае хэш %ENV действительно не будет доступен, но автору это не повредит, т.к. работа с файлом происходит после загрузки сервера. |
|||
|
||||
tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: нет Всего: 8 |
|
|||
|
||||
tolkien |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 5.4.2008 Репутация: нет Всего: 4 |
Такая дериктова абсолютно ясно говорит где еще искать модули PERL кроме стандартной деректории.
use lib qw(.); Если она не работает, а такое вполне возможно. То значит PERL на серваке обрезанный. С ограничениями. Или сам PERL не корректно работает. |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
Уважаемый tolkien, не могли бы Вы внести ясность по поводу того, что такое "стандартная деректория" и где именно ищутся модули при использовании указанной Вами директивы?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
tolkien |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
ginnie |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
Уважаемый tolkien, конкретизирую вопрос:
в httpd.conf пишем
В файле F:\Apache\cgi-bin\test.pl пишем
(хотя она и так всегда там есть ![]() Теперь вопрос: какой, по вашему, путь скрывается за '.'? -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||
|
|||||
tolkien |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 5.4.2008 Репутация: нет Всего: 4 |
Все что я выше писал. Относится к CGI программированию. А не ко всяким извращениям. Вроде включений скриптов в конфиг апач.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl: CGI программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |