
Tengo una pila NGINX -> UWSGI -> Django(python) instalada en una AMI de Ubuntu en Amazon EC2. Me encontré con un problema al acceder a un archivo con caracteres Unicode en el nombre. El resultado exacto de la aplicación Django (Mezzanine) es
Se intentó acceder a un archivo que contiene caracteres Unicode en su ruta, pero de alguna manera la configuración regional actual no admite utf-8. Es posible que deba configurar 'LC_ALL' con un valor correcto, por ejemplo: 'en_US.UTF-8'.
Ahora, cuando ejecuto el locale
comando, el resultado es:
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
Para mí, todo se ve bien allí, así que a continuación agregué algo de código para imprimir la configuración regional en la sección de código que genera el error.
El resultado de eso es:
locale.getdefaultlocale() = (None, None)
locale.getpreferredencoding() = 'ANSI_X3.4-1968'
sys.getdefaultencoding() = 'ascii'
sys.getfilesystemencoding() = 'ANSI_X3.4-1968'
Parece que está mal, pero no estoy seguro de cómo solucionarlo. Cuando ejecuto el mismo código en un shell de Python, todo se ve mucho mejor.
locale.getdefaultlocale() = ('en_US', 'UTF-8')
locale.getpreferredencoding() = 'UTF-8'
sys.getdefaultencoding() = 'ascii'
sys.getfilesystemencoding() = 'UTF-8'
Entonces, mi único pensamiento es que en algún lugar de la parte nginx y uwsgi la configuración regional no está configurada correctamente. ¿Hay alguna forma de obligar a cualquiera de ellos a utilizar una determinada ubicación? ¿O podría ser algo del usuario? Es un usuario diferente el que ejecuta nginx y uwsgi del que estaba usando para ejecutar esos comandos en el shell.