
У меня есть стек NGINX -> UWSGI -> Django(python), установленный на Ubuntu AMI на Amazon EC2. Я столкнулся с проблемой при доступе к файлу с символами unicode в имени. Точный вывод из приложения Django (Mezzanine) такой:
Была предпринята попытка доступа к файлу, содержащему символы юникода в своем пути, но каким-то образом текущая локаль не поддерживает 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, а не тот, которого я использовал для запуска этих команд в оболочке.