Как я могу загрузить модуль Perl из относительного пути в IIS6? - PullRequest
0 голосов
/ 27 мая 2010

Я использую модуль Perl, вызываемый из CGI-скрипта в IIS 6, который является бомбардировкой. Идентичная структура папок на машине с XP (IIS 5.1) работает просто фантастически. Если я удалю команду загрузки модуля в строке 9, она напечатает «собирается загрузить» и «ок», но когда я пытаюсь запустить

use Language::Guess;

Я получаю

указанное приложение CGI плохо себя вел, не вернув полный набор заголовков HTTP.

в браузере.

Структура папок /cgi-bin/test.pl /PerlModules/Language/Guess.pm

Я попытался настроить права доступа к файлам / папкам и пересматривал конфигурацию IIS снова и снова. Он отлично работает из командной строки на компьютере IIS или если я скопирую модуль в \ Perl \ site \ lib, но у меня нет разрешения загружать модули на общий сервер, для которого предназначен этот скрипт. Я упускаю что-то простое?

Вот test.pl

use strict;
use CGI ':standard';

print header("text/html");

use lib "..\\PerlModules\\"; 
print "about to load<br/>";
#bombs here
use Language::Guess;

print "ok"

1 Ответ

2 голосов
/ 27 мая 2010

Проблема в линии

use lib "..\\PerlModules\\";

Измените его на полный путь к тем местам, где находятся модули Perl:

use lib "C:\\Perl\\PerlModules\\";

или что угодно.

Причина в том, что ваш сценарий CGI, запускаемый из командной строки в том же каталоге, в порядке, но когда он запускается с абсолютным путем сервером из другого каталога, каталог ..\\PerlModules\\ больше не является правильным местоположением модулей (потому что сейчас .. относится к каталогу сервера, а не к вашему скрипту). Когда он пытается загрузить модуль, он не может найти его и печатает сообщение об ошибке. Веб-сервер не может справиться с сообщением об ошибке, поэтому вы получите приведенное выше.

Если вы не хотите использовать абсолютный путь в вашем скрипте cgi, попробуйте использовать use lib внутри блока BEGIN с модулем FindBin.

Одной из проблем, которая устраняет подобные проблемы, является модуль CGI :: Carp и его опция "fatalsToBrowser":

 use CGI::Carp 'fatalsToBrowser';

ловит ошибки и выбрасывает их в браузер. Это только для отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...