Назад | Перейти на главную страницу

Модуль Perl XML :: Expat не загружается динамически под IIS 7 и Windows 2008

Мы внутренне перемещаем наше старое приложение Perl / CGI в новую систему и столкнулись с проблемой. Когда я бегу:

 perl -MXML::Parser -e 1

Из командной строки все хорошо. Однако, когда я запускаю его из сценария CGI как use XML::Parser, все адские перерывы проигрывают:

Не удалось загрузить C: /strawberry/perl/site/lib/auto/XML/Parser/Expat/Expat.dll для модуля XML :: Parser :: Expat: load_file: указанный модуль не может быть найден в C: /strawberry/perl/lib/DynaLoader.pm строка 200, строка 55. в C: /strawberry/perl/site/lib/XML/Parser.pm строка 18 Не удалось выполнить компиляцию, требуется в C: / клубника / perl / site / lib /XML/Parser.pm строка 18, строка 55. Ошибка BEGIN - компиляция прервана на C: /strawberry/perl/site/lib/XML/Parser.pm строка 22, строка 55. Компиляция завершилась неудачно при требовании в (eval 43) строка 1, строка 55. Ошибка BEGIN - компиляция прервана на (eval 43) строка 1, строка 55.

Другие модули, добавленные в установку Perl, работают нормально (MD5, WIn32 :: ODBC и т. Д.), Но этот Expat one ворчит.

Сервер - это IIS 7 (новый для нас для этого приложения), x64 Win2008 (также новый для нас).

РЕДАКТИРОВАТЬ:

После того, как мы немного поигрались с этим, это не единственный модуль, который не загружается. XML :: Simple тоже. Почти такая же ошибка. Библиотеки DLL, которые утверждает Perl, не существуют, существуют нормально. И все работает также из командной строки.

Предложения?

В дистрибутиве perl для Windows в Cwd.pm есть ошибка. Видеть https://rt.cpan.org/Public/Bug/Display.html?id=56225 для подробностей.

Исправление, которое сработало для меня, - заменить эту строку:

if (eval 'defined &DynaLoader::boot_DynaLoader') {

с участием

if (eval { defined &DynaLoader::boot_DynaLoader; }) {

в sub _win32_cwd

Я также нашел более подробную информацию здесь: www.epic-ide.org/faq.php#debug

Простите за ответ на свой вопрос, но я наткнулся на это ...

После нескольких часов поиска, проблема оказывается в настройках IIS ApplicationPool. Если у вас есть Загрузить профиль пользователя установлен в Ложь затем Perl Dynaloader сам гадит и ничего не работает - и без особо полезных сообщений. Я не знаю, что по умолчанию, но ложь приводит к сбою.

Итак, сейчас все работает нормально, и вот настройки в пуле приложений:

32-разрядный: включен Пользователь: загрузка пула приложений Профиль пользователя: True

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