解决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 13 Python
python获取局域网占带宽最大3个ip的方法
Jul 09 Python
实现python版本的按任意键继续/退出
Sep 26 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
Jul 10 Python
儿童python练习实例
May 27 Python
Python异常处理例题整理
Jul 07 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
Jan 18 Python
keras 自定义loss model.add_loss的使用详解
Jun 22 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 Python
PyTorch: Softmax多分类实战操作
Jul 07 Python
Django2.1.7 查询数据返回json格式的实现
Dec 29 Python
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
Apr 03 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图片上传存储源码并且可以预览
2011/08/26 PHP
分享PHP守护进程类
2015/12/30 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
JavaScript 大数据相加的问题
2011/08/03 Javascript
判断ie的两种简单方法
2013/08/12 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
浅谈关于axios和session的一些事
2017/07/13 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
vuex进阶知识点巩固
2018/05/20 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
Python读取mp3中ID3信息的方法
2015/03/05 Python
python传递参数方式小结
2015/04/17 Python
深入理解python中的浅拷贝和深拷贝
2016/05/30 Python
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
django-allauth入门学习和使用详解
2019/07/03 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
weblogic面试题
2016/03/07 面试题
2014年庆元旦活动方案
2014/02/15 职场文书
学生会部长竞聘书
2014/03/31 职场文书
差生评语大全
2014/05/04 职场文书
团干部培训方案
2014/06/03 职场文书
综合素质自我评价评语
2015/03/06 职场文书