windows环境下的Flask应用部署

因为一个好奇心,所以开始学习Flask,自己做一些简单的工具,用来解决工作上的问题.在过程中,遇到了这样的一个问题.我应该把我的应用部署到哪里?因为我只有一个windows server2008,网上粗略搜索到的,都是基于linux部署的.为了让我的APP能运行的更加省心,我整理了一下windows上部署flask的方案.

由于flask本身运行不稳定,需要将其部署在可以容纳WSGI应用的服务器上,客户服务器是windows server 2008,原来发布解决方案是在Linux下Nginx+uWSGI,uWSGI不能运行在windows下。于是梳理可以在windows下运行方法。

  • Gevent:是一个 Python 并发网络库,它使用了基于 libev 事件循环的 greenlet 来提供一个高级同步 API
  • Twisted Web:Twisted Web 是一个 Twisted 自带的网络服务器,是一个成熟的、异步的、 事件驱动的网络库。 Twisted Web 带有一个标准的 WSGI 容器,该容器可以使用 twistd 工具运行命令行来控制。
  • tornado:异步非阻塞的web服务,有类似的文章介绍,flask官方文档中没有推荐使用。
  • Apache:老牌web服务安装MOD_WSGI后可以运行

嗯...这里使用了Twisted Web.

Twisted 安装:

方案1:
可以尝试pip安装下:(在我的win10下,尝试了下,不一定能成功)

pip install twisted

方案2:
到这个网址下载:https://www.lfd.uci.edu/~gohlke/pythonlibs/
下载和自己python版本对应的twisted:  
如我的python是3.6 win32,我就下载了Twisted-17.9.0-cp36-cp36m-win32.whl  
然后执行安装:pip install Twisted-17.9.0-cp36-cp36m-win32.whl  
剩下需要依赖的,程序会自动下载下来

方案3:
工作环境是内网,与外网物理隔离.所以我们可以先外网安装好,打包虚拟环境到内网。在内网安装先安装相同版本的python,再启动虚拟环境,启动安装好的程序。
 

Twisted 测试 

# 新建文件twisted_web.py 录入如下代码
from twisted.web.wsgi import WSGIResource
from twisted.internet import reactor

def application(environ, start_response):
    start_response('200 OK', [('Content-type', 'text/plain')])
    return ['Hello, world!']

resource = WSGIResource(reactor, reactor.getThreadPool(), application)

# 在cmd下执行:
twistd -n web --wsgi twisted_web.application

其中twisted_web是文件名,application是函数application(environ, start_response).(因为环境问题,可能会有坑..下文会有解决方案)


Twisted 和Flask

一个简单的FlaskDemo(main.py)

from flask import Flask,render_template
app = Flask(__name__)

@app.route('/')
def hello():
    return render_template("index.html")

if __name__ == '__main__':
    app.run(debug=True)

CMD中执行:
twistd -n web --wsgi main.app
其中main是文件名,app是app = Flask(__name__)中变量

em..然后遇到了这个信息:

twistd: No such WSGI application: 'main.app'

网上查了下,原因是twistd没有正确找到环境变量,所以,我们只要设置PYTHONPATH为当前目录即可.这里提供了一个简单的启动脚本(run.bat):

set PYTHONPATH=.
twistd -n web --port tcp:8080 --wsgi main.app

参考:

猜你喜欢

转载自blog.csdn.net/qq_30901367/article/details/109208962
今日推荐