django -- 部署 ‘ascii’ codec can’t encode characters in position


奚者为奴,怜我奚儿,囚于闺阁囹圄,终不得见世间川峦,人生百态 -- 昭奚旧草


问题排查

真的是第一次在 py3 中遇到编码错误的问题

  • 本地一切正常
  • 服务器端博客一出现中文就报错
  • 服务器使用python -c "import sys; print(sys.getfilesystemencoding())" 获取到的编码为 utf-8,也是 Python3 默认的编码,没什么问题
  • 网上的大部分解决方法压根不起作用,py3 中直接报错
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

  • 然后觉得是部署环境的问题了,突然想到使用到的进程管理工具 supervisor 也是 Python 写的,就往这个方向找到了解决方法,在配置中添加环境变量 environment,具体的原因可参考链接
[program:django]
command=/root/anaconda3/bin/uwsgi --emperor /etc/uwsgi/vassals
autostart=true
autorestart=true
user=root
log_stderr=true
logfile=/var/log/uwsgi_django.log
environment=LANG="en_US.utf8", LC_ALL="en_US.UTF-8", LC_LANG="en_US.UTF-8"


参考

supervisor遇到的坑