Если Django начинает ругаться из под gunicorn UnicodeEncodeError

Послу установки отлаженного приложения на сервер возможена такая ситуация, что приложение не работает, а в логах что-то вроде

type 'exceptions.UnicodeEncodeError', ': 
', UnicodeEncodeError('ascii', u'dpsse/history/lipa-vagonka.ru/\u0412\u0430\u0433\u043e\u043d\u043a\u0430/2013-09-30', 30, 37, 'ordinal not in range(128)'))

Скорее всего это говорит о том, что запущенный экземпляр Django не знает о системной локали, проверить это легко, нужно в рабочем месте приложения сгенерировать исключение в котором показать текущую локаль

raise RuntimeError( os.has_key('LANG') )

или

import logging
logger = logging.getLogger( __name__ )
logger.error( os.has_key('LANG') )

Если будет что-то вроде

raise RuntimeError( os.environ['LANG'] )
  File "/data/django/gaspiko.ru/env/lib/python2.6/UserDict.py", line 22, in __getitem__
    raise KeyError(key)
KeyError: 'LANG'

Значит локаль ни где не установлена! Проще всего установить локаль в скрипте запуска gunicorn

1 #!/bin/bash
2 export LANG=ru_RU.UTF-8
3 set -e

После перезапуска всё должно работать

Комментариев 0
Нужна авторизация с помощью
Об авторе
Илья Илья

меня можно найти тут