uwsgi补充内容

补充一:安装

网上查了又查。有几种uwsgi的方案安装。

pip 进行安装的uwsgi,说是python的包管理,

yum和编译安装是一种服务的态度安装。

博主进行对比相对比较少,今天就补充一下yum安装和编译安装。

一、yum安装

yum install uwsgi -y

然后查看各种插件的方法就是

yum install uwsgi* # 使用通配符进行查看。不要使用-y参数。因为有大部分的插件是不需要的。

yum安装比较简单,此处就不多做详解了。咱讨论一下编译安装

二、编译安装

编译安装,坑实在是多得可怕,因为网上的教程大部分是这样的,以及官网都比较简单。

wget https://projects.unbit.it/downloads/uwsgi-2.0.13.1.tar.gz
tar xf uwsgi-2.0.13.1.tar.gz
cd uwsgi-2.0.13.1
python uwsgiconfig.py --build

就这么几个步骤完事了。

但是需要说的有这几点。

和python结合是需要python插件的。

python uwsgiconfig.py --plugin plugins/http core

但是你会发现,报错在所难免,我研究了一天,没研究明白。

yum install python-devel # 需要这个安装包才能安装插件成功

可是,你会发现,我前面的代码都是用python2来进行编译的,那么基本每个步骤都能成功。

你要是使用python3的话,又报错。

个人估计,是因为编译安装python3的时候,缺少各种编译参数,少包。

博主正在寻找原因。。

博主正在查找以下几点:   时间:2017/09/22

一:uwsgi如何使用python3来进行解析。而不是使用python2。
二:uwsgi的如此之多的插件,有哪些是优化项目。
三:uwsgi的编译安装如此多的坑,都有那些。

解决:

一:uwsgi支持python3方法就是,安装python-devel之后然后用python3进行编译即可。即步骤以下:
yum install python-devel   # 无需理会版本,这点我就有点迷茫
python3 uwsgiconfig.py --build  # 这点就好解释多了
python uwsgiconfig.py --plugin plugins/python core # 这个是不是更简单了。想要支持python,就得装个python插件

  

  

 

补充二:多实例

多实例,实乃无奈之举,博主遇见的pip安装uwsgi的假死状态。一怒之下启动了多实例。

多实例的方案就是,复制多个配置文件,启动文件。

一个启动文件对应一个配置文件。

即可多实例成功。

补充三:假死

表示至今没找到为什么。

所以准备使用编译方法安装uwsgi。防止出现差错。

 补充四: 报ascii错误

由于代码多了一个print,然后就报出了python2经常报的错误。  ascii错误。

经研究许久,没发现问题所在。 博主的环境是:   MySQL:utf8       Linux: utf8    python代码:utf8

然后我添加一个语句:

LANGUAGE=en_US.UTF-8

好像就好使了。

然后就修改了

/etc/locale.conf 

[root@web01 ~]# vim /etc/locale.conf 

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

坐等后面不要再出现报错啦。

 

补充五:对于reload的时候一直失败。


笔者使用的方法是简单的重启:在lazy-apps模式重载worker

后来我用了别的重启方法,各种失败。不知道为什么--touch-workers-reload一直失败。

然后我就用了一个参数 py-autoreload = 2 来做测试环境。那么重载就一直能成功了。

对了。  对于    stop  再start的话,频率太高会导致启动失败。

 

然后我找啊找,找到另外一种方案,  用管道方法 FIFO。

uwsgi 1.9.17之后,就支持了FIFO的方式,   嗯,  说得一本正经,我也不知道管道是个什么东西。

 

然后  uwsgi的配置文件添加一个参数   master-fifo = /tmp/uwsgififo

必须在tmp下面,其他地方会出现权限问题。当然,权限你把我  也可以放

然后 该文件别自己创建。 应该用uwsgi启动程序自动创建。

紧接着。就用下面命令重启

echo w > /tmp/uwsgififo

当然,一切以官网为主,凡是复制粘贴的,只是在浪费搜索人的时间而已。

http://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/MasterFIFO.html      FIFO网址

http://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/articles/TheArtOfGracefulReloading.html   优雅重启

 

补充六:多环境配置。

网上有一个方案是通过virtualenv的方法,可是我线上环境不想使用virtualenv。所以我就另寻方法了。

首先,讨论一下需求:本地环境,测试环境,生产环境 的配置文件都是不一样的。

比如MySQL经常使用自己本地的数据库做测试,然后测试环境的数据库又是一个测试库。 生产环境的库又是一个。

那么,解决方案如下:

一:使用sed命令修改。

优点:简单,可以让数据库的信息不暴露给开发。
缺点:容易改错,改不全等等原因。  不要告诉我你sed玩得多牛逼,不好意思,开发会经常修改他们的配置文件。
而且会出现你意想不到的原因,比如数据库明明修改,可是程序启动起来却。。。。窜库或许是因为这个原因导致的。

  

二:使用uwsgi的配置文件修改:

优点:运维可以自己搞定,即使不懂开发。
缺点:配置文件有太多的重复,有时候开发不知道自己是否修改。直接提交。  上线,崩盘。数据找不回等等。 配置不是特别麻烦,但是注意一个问题“.”代表路径。

  

三:使用代码程序实现。

优点:灵活方便。
缺点:运维不懂python语言不懂修改,即使懂你没加入业务开发,你也不知道如何修改。

  

综上,推荐第三总方案。

sed不讲解了。

第二种方案:http://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/tutorials/Django_and_nginx.html  里面查找

env = DJANGO_SETTINGS_MODULE=mysite.settings

该配置文件意思就是    django的配置文件在mysite下面settings  即,你可以把settings取名成生产环境和测试环境。

第三种方案:修改settings

就是使用下面的方法来获取环境变量。

os.environ.get()

或者

>>> import platform
>>> platform.node()  # 获取主机名

具体写法 ,我记起来查找就写。

 获取环境变量来实现多环境的使用

VUE可以配置环境变量

Dajngo的settings和uwsgi 同时配置环境变量, 外加配置一个主机的环境变量即可

 

 

 

 

 

posted @ 2017-09-22 23:17  汉克书  阅读(656)  评论(0编辑  收藏  举报