解决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-基础-入门 简介
Aug 09 Python
Python的迭代器和生成器
Jul 29 Python
Python调用C# Com dll组件实战教程
Oct 12 Python
PyTorch CNN实战之MNIST手写数字识别示例
May 29 Python
IntelliJ IDEA安装运行python插件方法
Dec 10 Python
Python函数装饰器实现方法详解
Dec 22 Python
浅谈python3.x pool.map()方法的实质
Jan 16 Python
Python制作exe文件简单流程
Jan 24 Python
浅谈Pytorch中的torch.gather函数的含义
Aug 18 Python
Python Django实现layui风格+django分页功能的例子
Aug 29 Python
python实现单链表的方法示例
Sep 03 Python
快速解决jupyter notebook启动需要密码的问题
Apr 21 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 xml文件操作实现代码(二)
2009/03/20 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
禁止ajax缓存获取程序最新数据的方法
2013/11/19 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
vue实现pdf文档在线预览功能
2019/11/26 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
JavaScript实现浏览器网页自动滚动并点击的示例代码
2020/12/05 Javascript
python对数组进行反转的方法
2015/05/20 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
深入理解Python分布式爬虫原理
2017/11/23 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
Python3 批量扫描端口的例子
2019/07/25 Python
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
pycharm工具连接mysql数据库失败问题
2020/04/01 Python
Python3爬虫ChromeDriver的安装实例
2021/02/06 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
Html5新增标签有哪些
2017/04/13 HTML / CSS
车辆工程专业求职信
2014/04/28 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
安全教育月活动总结
2014/05/05 职场文书
岗位聘任报告
2015/03/02 职场文书
Nginx本地目录映射实现代码实例
2021/03/31 Servers
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
php png失真的原因及解决办法
2021/11/17 PHP