gunicornwepy 部署署一个简单的py文件都报错,求教那块的问题

Nginx + Gunicorn + Django 部署小记 - isaced
March 10, 2014
Nginx + Gunicorn + Django 部署小记
这段时间在用Django开发一个论坛,打算做一个Cocoa开发者社区。这几天在学习如何部署,正好前段时间UCloud送了三个月主机,可以拿来练练手。VPS用的64位的Ubuntu 12.04,折腾两天总算走通了,赶忙记录下来...apt-get服务器拿到手后第一件事就是更新apt-get,要换源什么的自己搜一大堆。之前因为系统不小心选成了Ubuntu 10.04了,遇到一大堆问题,后来换到12.04一切顺利。apt-get updatepippip还是建议更换源,速度是飞一般的感觉。具体方法可以看看我之前介绍的那篇文章《》sudo apt-get install python-pipDjangoDjango不用说肯定是用pip装,我一般是用的最新版,这样就可以了。sudo pip install djangoNginx首先给默认的Nginx配置备个份,这是好习惯。目录位于/etc/nginx/sites-available/defaultcp /etc/nginx/sites-available/default default.bak然后Vim编辑vim /etc/nginx/sites-available/defaultserver {
server_name www.isaced.
access_log
/var/log/nginx/isaced.
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $
proxy_set_header X-Real-IP $remote_
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_
location /static/ {
root /data/ #Django项目所在目录
}以上是最简单的Nginx配置,目的是为能跑起来就行,更多其他详细配置还请参照其他文章。Gunicorn是一个朋友(CloverStd)推荐的,一个开源Python WSGI UNIX的HTTP服务器,Github仓库地址,传说速度快(配置快、运行快)、简单,默认是同步工作,支持Gevent、Eventlet异步,支持Tornado,官方有很详细的文档可以参阅。需要在你的Django项目的settings.py中的INSTALLED_APPS加入:gunicorngunicorn --worker-class=gevent isaced.wsgi:application--worker-class指定工作方式,这里我用的gevent如果提示You need gevent installed to use this worker则表示你还没有安装 gevent。isaced.wsgi:application这里是指你的项目名,在Django创建项目的时候会自动生成对应名字文件夹中的wsgi.py,这里就是指的它。nohupnohup是一个 Linux 命令,搭配 & 来不挂断地运行某条命令达到后台执行的效果,默认会在根目录生成一个 nohup.out 文件用来记录所有的 log 信息,也可以重定向到其他位置。这里我们用它来执行gunicorn,来保持 gunicorn 进程不会被挂断。nohup gunicorn --worker-class=gevent NSLoger.wsgi:application -b 127.0.0.1:8000&--worker-class来指定工作方式为gevent,-b指定地址和端口号。注意:在尾部加上&(and)字符表示后台运行执行这条命令后可以用ps命令查看进程,就能看到gunicorn了~Start好了,以上就是整个服务器的配置了。然后我们重启下Nginx,刷新页面就能看到你的Django App了。sudo service nginx restart一篇小白的部署日记就到这里了,如有什么错误的地方还请各位大大指正!另外再推荐一篇文章: 更新: 建议看看这篇文章,讲的更好!
Please enable JavaScript to view thegunicorn启动报错gunicorn.errors.HaltServer
启动gunicorn报错:
# gunicorn -b :9008 -w 2 webserver:app
09:12:58 [29701] [INFO] Starting gunicorn 0.14.3
09:12:58 [29701] [INFO] Listening at: http://0.0.0.0:)
09:12:58 [29701] [INFO] Using worker: sync
09:12:58 [29704] [INFO] Booting worker with pid: 29704
09:12:58 [29705] [INFO] Booting worker with pid: 29705
09:12:58 [29704] [INFO] Worker exiting (pid: 29704)
09:12:58 [29705] [INFO] Worker exiting (pid: 29705)
Traceback (most recent call last):
File "/root/.virtualenvs/py268/bin/gunicorn", line 8, in &module&
load_entry_point('gunicorn==0.14.3', 'console_scripts', 'gunicorn')()
File "/root/.virtualenvs/py268/lib/python2.6/site-packages/gunicorn/app/wsgiapp.py", line 32, in run
WSGIApplication("%prog [OPTIONS] APP_MODULE").run()
File "/root/.virtualenvs/py268/lib/python2.6/site-packages/gunicorn/app/base.py", line 129, in run
Arbiter(self).run()
File "/root/.virtualenvs/py268/lib/python2.6/site-packages/gunicorn/arbiter.py", line 184, in run
self.halt(reason=inst.reason, exit_status=inst.exit_status)
File "/root/.virtualenvs/py268/lib/python2.6/site-packages/gunicorn/arbiter.py", line 279, in halt
self.stop()
File "/root/.virtualenvs/py268/lib/python2.6/site-packages/gunicorn/arbiter.py", line 327, in stop
self.reap_workers()
File "/root/.virtualenvs/py268/lib/python2.6/site-packages/gunicorn/arbiter.py", line 413, in reap_workers
raise HaltServer(reason, self.WORKER_BOOT_ERROR)
gunicorn.errors.HaltServer: &HaltServer 'Worker failed to boot.' 3&
使用debug模式查看更多信息--log-level=debug:
gunicorn -b :9008 -w 2 webserver:app& --log-level=debug
发现是import error
添加pythonpath以及import的资源目录添加__init__.py文件使之成为一个package即可
export PYTHONPATH=/home/..
环境:RHEL6.4 + Oracle 11.2.0.4 步骤摘要:1.启动报错ORA-031132.查看alert日志查找原因3.根据实际情况采取合理的措施,这里我们先增加闪回区大小,把库启动起来4 ...
SHH框架工程,Tomcat启动报错org.springframework.web.context.ContextLoaderListener类配置错误 1.查看配置文件web.xml中是否配置.or ...
现象: tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig() ...
环境:RHEL5.5 + Oracle 10.2.0.4 此错误一般是因为数据库的初始化参数文件的内存设置不当导致.本例是因为操作系统参数设置问题导致. 当前现象:Oracle启动报错ORA-2710 ...
ssh项目启动报错: org.dom4j.DocumentException: Connection timed out: connect Nested exception: Connection t ...
服务器环境:Windows Server 2008 R2 企业版,Visual SVNServer 2.6.5 不能签出代码,发现svn服务关闭,手动启动报错: 事件查看器: Error: no li ...
Tomcat7.0启动报错:java.lang.illegalargumentexception:taglib definition not consisten with specification
eclipse启动报错,让查看.metadata\.log日志 eclipse启动不了,让查看.metadata\.log日志,上面为日志中的错误提示. 解决办法:删除 .metadata\.plug ...
Weblogic 启动报错:java.lang.NoClassDefFoundError
####& 下午03时30分47秒 CST& &Error& &l ...
本系列内容全部来自于http://www.cnblogs.com/skywang12345/p/3514589.html 特在此说明!!!!! 根据修改的数据类型,可以将JUC包中的原子操作类可以分为 ...
基本类型: 布尔型:boolean 整型:int8,byte,int16,int,uint,uintptr等 浮点型:float32,float64 复数类型:complex64,complex128 ...
一.简介 autojump是一个命令行工具,它允许你可以直接跳转到你喜爱的目录,而不用管你现在身在何处. 二.安装 yum install autojump 三.用法 j [目录的名字或名字的一部分] ...
先简单介绍一下: rgba()函数是平时开发中经常遇到的,这篇文章也做了一个比较详细的解读以及一系列的应用. 对它的工作原理做一番分析:就是具有一定透明度的盒子: 还比较了rgba()函数和不透明度属 ...
直接看代码 &!doctype html& &html lang=&en&& &head& &meta charset=&utf ...
出现此错误原因大都为:手机上原来APK存在残留,即没有卸载干净,导致不能安装新的APK 解决办法: 1.手机上手动卸载出现问题的APP,再重新安装 2.如果apk无法卸载,则将apk相关文件和相关内容 ...
题意:给n对炸弹,每对炸弹选其中一个爆炸. 每个炸弹爆炸的半径相同 圆不能相交, 求最大半径 2-sat简介 二分半径, 枚举n*2个炸弹 若i炸弹与j炸弹的距离小于半径*2 则建边 比如
第一对炸 ...
题意:求区间内与其他任何数都互质的数的个数. 题解:求出每个数左右互质的边界.然后对询问排序,通过树状数组求解. 讲道理真的好难啊= = http://blog.csdn.net/dyx404514/ ...
dir /sdir /pdir /w 我记得这三个都是我当年常用的命令,有分瓶的,有滚动时候每页停顿的,还有去掉详细信息的吧,, 可以放在一起使用.如dir /p/w /p是滚动时候中间停顿的,/w是 ...
转载:SQL Server 索引结构及其使用(一) 作者:freedk 一.深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clus ...9种python web 程序的部署方式小结
转载 &更新时间:日 09:02:04 & 投稿:hebedich
python有很多web 开发框架,代码写完了,部署上线是个大事,通常来说,web应用一般是三层结构web server ----&application -----& DB server
主流的web server 一个巴掌就能数出来,apache,lighttpd,nginx,iis
application,中文名叫做应用服务,就是你基于某个web framework写的应用代码DB server 泛指存储服务,web开发中用mysql比较多,最近几年因为网站规模扩大,memcache,redis这种key-value等存储也流行开来
放在最前面的 web server 有3个功能
高效率处理静态文件 ,web server都是用c开发,调用是native的函数,对IO,文件传输都做针对性的优化
充当一个简易的网络防火墙 ,可以denny一些ip,简单的控制并发连接数量等等,聊胜于无
处理高并发短连接请求 ,把成千上万用户的request 通过内网的几十个长连接进行转发,原因一个是web server处理高并发很专业,另外一个原因是大部分的application所用的框架都不具备处理高并发的能力
实际上,市面上有部分web framework由于内置了支持epoll/kqueue 等高效网络库,而具备了处理高并发的能力,比如说 python的tornado,java系的tomcat,jetty等等,有人就去掉前端的web server,直接裸奔,但是在部署公网应用时候,最好别这样做,因为前面提到的1,2两个原因,用户brower到web server的网络状况是千奇百怪,你无法想象的,
web server 强烈建议使用nginx,原因有三
性能非常卓越,非常稳定
安装简单,依赖包少
conf文件非常容易配置,比apache/lighttpd都要简单
部署python开发的web程序有9种方法
mod_python ,这是apache内置的模块,很严重的依赖于mod_python编译使用的python版本,和apache配套使用,不推荐
cgi ,这个太old,不推荐,而且nginx不支持cgi方式,只能用lighttpd或者apache
fastcgi& ,这个是目前流行最广的做法,通过flup模块来支持的,在nginx里对应的配置指令是 fastcgi_pass
spawn-fcgi ,这个是fastcgi多进程管理程序,lighttpd安装包附带的,和 flup效果一样,区别是flup是 python代码级引入,spawn-fcgi是外部程序。spawn-fcgi用途很广,可以支持任意语言开发的代码,php,python,perl,只要你代码实现了fastcgi接口,它都可以帮你管理你的进程
scgi ,全名是Simple Common Gateway Interface,也是cgi的替代版本, scgi协议 很简单,我觉得和fastcgi差不多,只是没有怎么推广开来,nginx对应的配置指令是scgi_pass,你想用就用,flup也支持。
http ,nginx使用proxy_pass转发,这个要求后端appplication必须内置一个能处理高并发的http server,在python的web框架当中,只能选择tornado.
python程序员喜欢发明轮子,tornado除了是一个web framework之外,它还可以单独提供高性能http server,所以,如果你采用其他python框架写代码,比如说bottle,也一样可以通过import tornado 来启动一个高性能的http server,同样的可以采用http协议和nginx一起来部署。扩展开来,python包里面能处理高并发的http server还有很多,比如说gevent,也可以被其他框架引用来支持http方式部署。
现实当中,用java来做web程序,通常就用http和nginx配合,应用服务器选择tomcat或者jetty
uwsgi ,包括4部分组成,
web server内置支持协议模块
application服务器协议支持模块
进程控制程序
nginx从0.8.4开始内置支持uwsgi协议,uwsgi协议非常简单,一个4个字节header+一个body,body可以是很多协议的包,比如说http,cgi等(通过header里面字段标示),我曾经做个一个小规模的性能对比测试,结果表明,uwsgi和fastcgi相比,性能没有太明显的优势,也可能是数据集较小的原因
uwsgi的特点在于自带的进程控制程序.它是用c语言编写,使用natvie函数,其实和spawn-fcgi/php-fpm类似。所以uwsgi可以支持多种应用框架,包括(python,lua,ruby,erlang,go)等等
Gunicorn ,和uwsgi类似的工具,从rails的部署工具(Unicorn)移植过来的。但是它使用的协议是 WSGI,全称是Python Web Server Gateway Interface ,这是python2.5时定义的官方标准( PEP 333& ),根红苗正,而且部署比较简单, & 上有详细教程
mod_wsgi ,apache的一个module,也是支持WSGI协议,
fastcgi协议和http协议在代码部署中的的优劣对比
fastcgi虽然是二进制协议,相对于http协议,并不节省资源。二进制协议,只能节省数字的表达,比如 1234567,用字符串表示需要7个Byte,用数字就是4个Byte,而字符串到哪里都一样
fastcgi在传输数据的时候,为了兼容cgi协议,还要带上一堆cgi的环境变量,所以和http协议相比,用fastcgi传输数据并不省,反而多一些
fastcgi 唯一的优点是,它是长连接的,用户并发1000个request,fastcgi可能就用10个 链接转发给后端的appplication,如果用http协议,那来多少给多少,会向后端appplication 发起1000个请求
http代理转发方式,在面对超高并发的情况下会出问题,因为, tcp协议栈当中,port是int16整型& 你本地新建一个connect,需要消耗一个端口,最多能到65536。外部并发几十万个请求,port池耗干,你的服务器只能拒绝响应了
我个人习惯是用 fastcgi 协议部署python程序,简单省事,选择技术方案,一定要选择最简单最常见的,本博客的fastcgi运行脚本如下
kill - `cat / tmp / django.pid`
echo 'restart django....'
python . / manage.py runfcgi - - settings = lutaf.settings_r maxchildren =
maxspare = minspare =
method = prefork pidfile = / tmp / django.pid host = 127.0 . 0.1
port = outlog = / tmp / dj.out errlog = / tmp / dj.error
推荐大家尝试 Gunicorn ,这是未来发展方向
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具gunicorn部署flask的log处理有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。最近在部署一个flask项目的时候, 选择了gunicorn, 确实性能还真不赖, 配置起来也比apache的mod_wsgi简单不少, 如有需要还可以在前端加上Nginx反向代理, 还可以设置gevent作为其异步worker进程, 应对一般的并发场景绰绰有余, 配置起来也相当灵活, 而且整套下来占资源也不多. 这里主要记录一下配置中的日志部分:import logging
from flask import Flask, jsonify
app = Flask(__name__)
@app.route(‘/’)
def default_route():
“””Default route”””
app.logger.debug(‘this is a DEBUG message’)
app.logger.info(‘this is an INFO message’)
app.logger.warning(‘this is a WARNING message’)
app.logger.error(‘this is an ERROR message’)
app.logger.critical(‘this is a CRITICAL message’)
return jsonify(‘hello world’)
if __name__ == ‘__main__’:
app.run(host=’0.0.0.0', port=8088, debug=True)
将上面代码保存成app.py然后运行, 访问http://&IP&:8088就能在终端中看到输出的log了:上面输出的log是flask自带的开发服务器输出的(Werkzeug的wsgi), 使用的是flask app的logger和handler,
当我们使用gunicorn部署flask项目的时候, 由于gunicorn有自己的日志logger, 因此需要将两者的logger关联起来, 最终输出的log才是正常的.解决办法:if __name__ != ‘__main__’:
gunicorn_logger = logging.getLogger(‘gunicorn.error’)
app.logger.handlers = gunicorn_logger.handlers
app.logger.setLevel(gunicorn_logger.level)
将上面代码块放在项目的app.py文件末尾中, 以上代码主要做了这几件事:if __name__ != ‘__main__’ 这种写法很少见, 意思是仅当该文件作为模块被导入时内部的代码才会被执行, 有个好处, 避免了硬编码,
当执行gunicorn app:app跑的时候app.py会被当成模块导入到gunicorn内部, 因为gunicorn实际上就是纯pyhton写的获取gunicorn的logger将gunicorn的logger和flask app的logger绑定在一起将绑定的logger 的level设置成gunicorn logger的level, 因为最终输出的log level是在gunicorn中配置的# 跑的时候设置log level, 最终就可以将flask的日志输出在gunicorn上了
$ gunicorn --workers=4 --bind=0.0.0.0:8000 --log-level=warning app:app
参考自:0分享收藏文章被以下专栏收录记录平时工作学习上的一些技巧、思考和感想}

我要回帖

更多关于 pytorch 部署 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信