nginx+uwsgi部署实践和问题解决(二)
承接上一篇 nginx+uwsgi部署实践和问题解决(一)
这篇中将继续罗列我在配置nginx+uwsgi中踩过的坑。
如果在这篇中没有找到的问题可以去前一篇中查看。
1.一段非常常见的nginx报错
在启动nginx后,查看日志,会看到这么一段报错
[error] 1198#1198: *224 connect() to unix:///home/myproject/myproject.sock failed (111: Connection refused) while connecting to upstream, client: 37.102.213.142, server: 37.102.213.142, request: "GET /common/page_contents/ HTTP/1.0", upstream: "uwsgi://unix:///home/myproject/myproject.sock:", host: "37.102.213.142:8000", referrer: "http://37.102.213.142/main"
我在google上直接搜索这段报错,得到了各种各样的原因分析和解决方案。
从报错信息来看,错因是nginx 向uwsgi转发请求,然后这个请求被uwsgi拒绝。
基本上,错误的原因不在于nginx, 而在于uwsgi服务器内部发生了错误,导致转发的请求被拒绝。
所以,应该去检查uwsgi的日志。
检查uwsgi的日志,发现是python有了一段报错,就这样发现了另一个坑,这个坑如下。
2. python ImportError : No module named ‘encodings’
正如标题,完整的报错如下:
Fatal Python error: Py_Initialize: Unable to get the locale encoding ImportError: No module named 'encodings'
经过查找大量的资料,出现这个报错的原因大部分都是由于 python的虚拟运行环境配置错误。
python虚拟运行环境又是什么?
在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.6。所有第三方的包都会被pip安装到Python3的site-packages目录下。
如果我们要同时开发多个应用程序,那这些应用程序都会共用一个Python,就是安装在系统的Python 3。如果应用A需要django 1.11.9,而应用B需要django 2.1怎么办?
这种情况下,每个应用可能需要各自拥有一套“独立”的Python运行环境。virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境。
但是我并没有使用python 虚拟运行环境,为什么还会报错? 后来,发现在 uwsgi的 .ini配置文件中有 home = … 这一项,用于指定虚拟环境变量随意,而我的这一项在配置时不懂,随意填了个值,导致了麻烦的错误。
对于单python应用,或者没有使用python 虚拟运行环境,uwsgi 中的home 这一项就不用再赋值了。
3.no python application found 的报错
unable to load app 0 (mountpoint='') (callable not found or import error) --- no python application found, check your startup logs for errors ---
这个也是一个比较常见的错误, 错因一般是 某个module或者app 没有 __init__.py这个文件,导致Python无法识别这个应用或模块。只要添加添加上,就不会报错。
如果__init__.py这个文件的内容为空,需要用touch 命令去创建这个空文件。
__init__.py这个文件作用是对一个python应用或模块进行初始化操作的,道理可以理解为一个类的构造函数,构造函数可以为空,但是一个类不能没有构造函数。
4.Error: That IP address can’t be assigned-to.
这个是在使用django 时,输入
python manage.py runserver http://192.168.1.XX:8080/
时,报的错误
stack overflow 上给出的解决方案是
python manage.py runserver 0:8000
亲测真的有效。
踩完这些坑后,我的nginx和uwsgi 都可以完美运行了,希望这些分享可以对广大读者和将来某一天 好了伤疤忘了疼的自己 一些帮助。
推荐阅读
-
Docker入门实践笔记(二)--安装和配置Tomcat镜像
-
详解vue通过NGINX部署在子目录或者二级目录实践
-
nginx+uwsgi部署实践和问题解决(二)
-
nginx+uwsgi部署实践和问题解决(一)
-
分享windows 10 下部署 elasticsearch 和 logstash (二)
-
linux部署二:网卡配置和Yum源的替换
-
Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二)
-
《Python编程:从入门到实践》第二章 变量和简单数据类型 习题答案
-
Docker入门实践笔记(二)--安装和配置Tomcat镜像
-
nginx了解(二) Nginx反向代理和负载均衡部署指南 张宴 f5 负载均衡 nginx tcp 负载均