您好,欢迎访问一九零五行业门户网

详解uWSGI的编码问题解决方法

最近在用flask 写的应用通过 supervisor+uwsgi 部署到正式服务器上时出现了错误,通过查找相关的资料终于解决了,所以想着分享出来给大家,下面这篇文章主要介绍了解决uwsgi的编码问题的相关资料,需要的朋友可以参考下。
发现问题
最近工作中遇到一个问题,在把 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
以上就是详解uwsgi的编码问题解决方法的详细内容。
其它类似信息

推荐信息