Как мне установить 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 для локали может помочь вам. Это даже показывает раздел устранения проблем.

Другие вопросы по тегам