解决uWSGI的编码问题详解


Posted in Python onMarch 24, 2017

发现问题

最近工作中遇到一个问题,在把 Flask 写的应用通过 Supervisor+uWSGI 部署到正式服务器上时,出现了这样的错误:

Unable to print the message and arguments ? possible formatting error.

或者

UnicodeEncodeError: ‘ascii' codec can't encode characters in position 24-25: ordinal not in range(128)

有趣的是,直接在 Python 环境下运行的时候,没有这样的错误。使用 uwsgi uwsgi.ini 这种方式来运行也正常。

由于对 unicode 的支持不够完善,这种报错经常会出现在 Python2 中,但我的所有程序都在 Python3 中写成,不应该再出现这样的错误。况且,所有的 python 文件都在首行设定了编码:

# -*- coding: utf-8 -*-

我的环境如下:

  • Ubuntu 16.04.1 LTS
  • Python 3.5.2
  • uWSGI 2.0.14 (in python3 pip)
  • Supervisor 3.3.1 (in python2 pip)

uwsgi.ini 配置文件内容如下:

[uwsgi]
master = true

wsgi-file = manage.py
callable = app

processes = 2
threads = 2
max-requests = 6000
chmod-socket = 664

uid = app
gid = app

buffer-size = 32768

venv = {project_dir}/venv

; http = 127.0.0.1:5001

logto = {project_dir}/logs/uwsgi.log

由于直接使用 Python 和 uwsgi 都不会出现这样的错误,因此可以判断应该是环境编码设置导致的问题。

查看服务器的编码如下:

% locale
LANG=C
LANGUAGE=C:
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

发现 LANG 和 LANGUAGE 环境变量并没有设置。

可以在 uwsgi.ini 中设定这两个环境变量的值。经过测试,发现实际起作用的是 LANGUAGE 。

env LANG="en_US.UTF-8"
env LANGUAGE="en_US.UTF-8"

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python 获取新浪微博的最新公共微博实例分享
Jul 03 Python
Python中的包和模块实例
Nov 22 Python
Python数组遍历的简单实现方法小结
Apr 27 Python
使用Python判断质数(素数)的简单方法讲解
May 05 Python
Django URL传递参数的方法总结
Aug 28 Python
利用信号如何监控Django模型对象字段值的变化详解
Nov 27 Python
Python+matplotlib实现填充螺旋实例
Jan 15 Python
Python 判断文件或目录是否存在的实例代码
Jul 19 Python
Python 判断奇数偶数的方法
Dec 20 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
Apr 01 Python
关于Keras模型可视化教程及关键问题的解决
Jan 24 Python
python opencv通过4坐标剪裁图片
Jun 05 Python
Python中动态创建类实例的方法
Mar 24 #Python
python3中set(集合)的语法总结分享
Mar 24 #Python
Python Socket编程详细介绍
Mar 23 #Python
python3中int(整型)的使用教程
Mar 23 #Python
python利用Guetzli批量压缩图片
Mar 23 #Python
python3中str(字符串)的使用教程
Mar 23 #Python
python常用知识梳理(必看篇)
Mar 23 #Python
You might like
浅谈php安全性需要注意的几点事项
2014/07/17 PHP
linux下为php添加iconv模块的方法
2016/02/28 PHP
全面解析PHP面向对象的三大特征
2017/06/10 PHP
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
node.js中的fs.open方法使用说明
2014/12/17 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
日常收集整理的JavaScript常用函数方法
2015/12/10 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
vue.js层叠轮播效果的实例代码
2018/11/08 Javascript
vue项目设置scrollTop不起作用(总结)
2018/12/21 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
python+os根据文件名自动生成文本
2019/03/21 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
如何在 Django 模板中输出 "{{"
2020/01/24 Python
matlab、python中矩阵的互相导入导出方式
2020/06/01 Python
python实现三种随机请求头方式
2021/01/05 Python
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
夏尔巴人登珠峰品牌:Sherpa Adventure Gear
2018/02/08 全球购物
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
Carrs Silver官网:英国著名的银器品牌
2020/08/29 全球购物
使用Vue.js和MJML创建响应式电子邮件
2021/03/23 Vue.js
大学校运会广播稿
2014/02/03 职场文书
保护母亲河倡议书
2014/04/14 职场文书
幸福家庭标语
2014/06/27 职场文书
2015清明节祭奠英烈寄语大全
2015/03/04 职场文书
单位提档介绍信
2015/10/22 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书