У меня есть стек NGINX -> UWSGI -> Django (python), установленный на Ubuntu AMI на Amazon EC2. У меня возникла проблема при доступе к файлу с символами Юникода в имени. Точный вывод из приложения Django (Mezzanine):
Была предпринята попытка доступа к файлу, который содержит символы Unicode в своем пути, но каким-то образом текущий языковой стандарт не поддерживает utf-8. Возможно, вам потребуется установить «LC_ALL» на правильное значение, например: «en_US.UTF-8».
Теперь, когда я запускаю locale
команда вывод:
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
На мой взгляд, там все выглядит хорошо, поэтому затем я добавил код для распечатки настроек локали в разделе кода, который генерирует ошибку.
В результате:
locale.getdefaultlocale() = (None, None)
locale.getpreferredencoding() = 'ANSI_X3.4-1968'
sys.getdefaultencoding() = 'ascii'
sys.getfilesystemencoding() = 'ANSI_X3.4-1968'
Это выглядит неправильно, но я не знаю, как это исправить. Когда я запускаю тот же код в оболочке Python, все выглядит намного лучше.
locale.getdefaultlocale() = ('en_US', 'UTF-8')
locale.getpreferredencoding() = 'UTF-8'
sys.getdefaultencoding() = 'ascii'
sys.getfilesystemencoding() = 'UTF-8'
Итак, моя единственная мысль заключается в том, что где-то в части nginx и uwsgi локаль не установлена должным образом. Есть ли способ заставить кого-либо из них использовать определенную локаль? Или это может быть что-то с пользователем? Это другой пользователь, который запускает nginx и uwsgi, чем тот, который я использовал для запуска этих команд в оболочке.