Мы внутренне перемещаем наше старое приложение 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 от имени реального пользователя (того, который я использовал в командной строке), и отмечая, что я не получал нужную среду, хотя у меня был настроен правильный пользователь. . При щелчке этого переключателя все заработало. В конце концов я вернулся к использованию пула приложений, но подтвердил, что причиной был этот переключатель.