Как мне установить LC_ALL и LANG под IIS?
Я пытаюсь запустить некоторые сценарии Perl CGI под IIS. Я получаю следующее сообщение:
CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_ALL = (unset),
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Я обнаружил, что проблема возникает только тогда, когда я "использую" нашу внутреннюю библиотеку, но она действительно большая (использует много других вещей), поэтому я предпочел бы знать, где искать. Когда я запускаю тот же скрипт из командной строки, скрипт работает просто отлично. Я попытался установить "LANG" в "C", затем "LC_ALL" в "C", но это не имело никакого эффекта.
Любые указатели приветствуются!
4 ответа
Переменные среды LANG и LC_ALL установлены для вашей оболочки, но не для IIS. Я не человек IIS, но в документах говорится, что IIS - это служба, и вы должны установить ее заранее, а затем перезагрузить.
В качестве альтернативы, вы можете установить эти переменные, как только ваш скрипт начнет компилироваться (и до того, как вы загрузите свою большую библиотеку, которая вызывает проблемы:
НАЧАТЬ { $ENV{LC_ALL} = ...; $ENV{LANG} = ...; }
Получите значения, которые вы должны использовать, взглянув на те, что есть в вашей оболочке.
Удачи,
Вы можете подавить эту ошибку, установив PERL_BADLANG=0, хотя это, как и LC_ALL, должно быть установлено до запуска сценария Perl.
Кажется, ваше Perl-приложение отправляет свои ошибки в браузер, и перед отправкой заголовка происходит ошибка.
Если вы используете модуль CGI, первый может быть вызван use CGI::CARP qw(fatalsToBrowser)
,
В этом случае fatalsToBrowser
приносит больше вреда, чем пользы, поэтому я бы посоветовал вам отключить его сейчас.
Perldoc для локали может помочь вам. Это даже показывает раздел устранения проблем.