解决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调用cmd复制文件代码分享
Dec 27 Python
小结Python用fork来创建子进程注意事项
Jul 03 Python
python通过线程实现定时器timer的方法
Mar 16 Python
Python自定义简单图轴简单实例
Jan 08 Python
python web.py开发httpserver解决跨域问题实例解析
Feb 12 Python
Python3模拟登录操作实例分析
Mar 12 Python
Django MEDIA的配置及用法详解
Jul 25 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
浅谈Python中的继承
Jun 19 Python
python连接mysql有哪些方法
Jun 24 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
Dec 01 Python
详解Python模块化编程与装饰器
Jan 16 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水印技术
2007/02/14 PHP
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
解析zend Framework如何自动加载类
2013/06/28 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
php fread函数使用方法总结
2019/05/28 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
jquery 图片缩放拖动的简单实例
2014/01/08 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
JavaScript事件委托实例分析
2015/05/26 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
[57:59]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第一场 11.05
2020/11/05 DOTA
python 提取文件的小程序
2009/07/29 Python
numpy.random模块用法总结
2019/05/27 Python
Python matplotlib绘制饼状图功能示例
2019/09/10 Python
浅谈Python 参数与变量
2020/06/20 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
单身旅行者的单身假期:Just You
2018/04/08 全球购物
采用冷却技术的超自然舒适度:GhostBed床垫
2018/09/18 全球购物
佳能法国商店:Canon法国
2019/02/14 全球购物
导购员的岗位职责
2014/02/08 职场文书
辅导员评语
2014/05/04 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS
nginx部署多前端项目的几种方法
2021/05/25 Servers
MySQL 十大常用字符串函数详解
2021/06/30 MySQL