Второй раз в жизни столкнулся с сайтом написанным на python+django. Уже после первого опыта работы с этой связкой у меня осталось резко-негативное мнение о сайтах написанных при помощи этого инструментария, второй раз не стал исключением (((
Перенос делал и ОС Ubuntu 12.04 на Debian 7. Обе ОС были 64bit архитектуры. Разница была только в ОС и все, остальное переносилось 1в1 – пути, ставил версии библиотек для python, молчу о том что pip freeze выдавал список модулей которые потом долго и нудно искались, так как по неизвестным мне причинам в стандартных репах и гитах не находились.
В итоге модули были установлены, скрипты перенесены, настройки прописаны, сервисы запущены, прописываю домен в hosts и вижу там ошибку “UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 18801-18807: ordinal not in range(128)” несколько дней было убито на поиск причины, так как код на старом сервере работал, а на новом нет, при том что версии интерпритатора языка, фреймворка и модулей были одинаковыми, грешил только на систему – но где именно ? Локали были приведены в общее состояние, конфиги идентичные, настройки одинаковые. Поиск в интернете результата не дал – все что рекомендовали прописать или изменить по настройкам – не помогло вообще. В итоге после убитых безрезультатно нескольких дней решил написать знакомому программисту, в итоге (Vim с меня пиво) он решил проблему примерно за 2 минуты ! решение банальное и просто он прописал принудительную кодировку в sitecustomize.py
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# cat /usr/lib/python2.7/sitecustomize.py # install the apport exception handler if available import sys sys.setdefaultencoding('utf-8') try: import apport_python_hook except ImportError: pass else: apport_python_hook.install() |
Он просто добавил в начало файла две строки:
import sys
sys.setdefaultencoding(‘utf-8’)
передернул uwsgi и проект стартанул работать как и на старом сервере.
Наверное это выше моего понимания когда разработчики делают через выхлопную ремонт двигателя, или не учитывают обратную совместимость и прочие гадости приводящие к танцам с бубном долгое время – что бы “оно заработало”.
В любом случае моя проблема была решена, Сане отдельное спасибо :).