zoukankan      html  css  js  c++  java
  • Flask + mod_wsgi + Apache on Windows 部署成功(随时接受提问)

    前言

    说是前言,纯粹就是吐槽。

    假设你赶时间。全然能够跳过这部分,我保证不会在这里隐藏不论什么实用的内容。

    人上年纪后。可能冲劲不足,我花了大概两周的时间才成功的将flask部署到windows上。还好没有放弃,终于找到了答案。

    只是这也说明我在开源软件的应用和配置上还非常差劲呀,当我看到要用VC10的C/C++编译器编译源码时,头都大了。你说我们这些平时习惯了Vistual Studio编译的。哪还懂什么make命令呀。

    还好网上什么都有,连帮你编译的都有,因此,编译这一难没有经历。

    对于flask这种开源软件来说,部署总是有多种选择。我如今吐槽一下我试过的,但没有成功的经历。

    1. PyISAPIe + IIS
    2. CGI + IIS (尽管配置成功,可是不能解析wsgi)
    3. FastCGI + Nginx
    4. FastCGI + Lighttpd (须要cygwin进行编译)
    当然,flask官方有关于部署文档。可是写得太简单。但我还是将链接粘出来。

    http://dormousehole.readthedocs.org/en/latest/deploying/index.html


    參考

    https://claudiosparpaglione.wordpress.com/2013/03/06/how-to-deploy-flask-applications-to-apache-webserver/

    我參考过非常多链接,可是是这篇文章把我引向正途。


    终于方案

    Flask + mod_wsgi + Apache
    Flask:  一个Python的web框架
    mod_wsgi: 一个为Python编写的Apache的FastCGI模块
    Apache: 一个类似于IIS的Webserver

    !!。注意 !

    !!

    假设以下这一点没有做到。整个过程有99%的可能性会失败。

    Apache,mod_wsgi和Python都必须用同样版本号的C/C++编译器生成,它们要么是32位的,要么是64位的,不能混用。

    由于我从Python官方网站上下载的Python 3.4就是32位的。而且是用VC10编译出来的。因此在下载Apache和mod_wsgi时。也必须选择32位的用VC10编译出来的版本号。

    之前我就是没有注意到这个问题,所以导致一直没有成功安装。


    这个问题的详解,參见: https://github.com/GrahamDumpleton/mod_wsgi/blob/master/win32/README.rst

    另外,Python官方网站提供的似乎都是32位的版本号。假设要64位的,预计须要自己动手编译了。
    Windows下的编译器。參见: http://www.microsoft.com/express/vc/




    步骤

    1. 安装Apache
    2. 安装mod_wsgi
    3. 安装Python
    4. 安装Flask
    5. 创建測试Web App
    6. 在Apache中配置网站
    7. 測试

    1. 安装Apache

    Apache是开源软件,针对windows环境。它不直接提供编译版本号。
    能够在http://www.apachelounge.com/download/ 下载适合自己环境的版本号。
    依据我自己当前的环境。我选择的是Win32 VC10编译出来的Apache2.4版本号
    将压缩包下载到本机,然后将压缩包里面的Apache24目录复制到C:。


    当然,你能够复制到你的系统的不论什么位置,但Apache的默认配置是C:Apache24。

    假设你本机执行了IIS。将其关掉。由于IIS和Apache都默认用的是80port。假设你想配置其他port。我相信那也不难。等把Flask部署成功后再来捣鼓吧。

    打开cmd
    >cd c:
    >cd Apache24in
    >httpd

    然后打开浏览器,输入
    http://localhost

    假设网页上显示 It Works! ,那说明apacheserver执行起来了。


    2. 安装mod_wsgi

    这个module可不能随便装,它是启动Python的关键。

    我不知道为什么Flask的官方网站上不把这个模块的安装列出来。仅仅是简单的说了一下httpd.confg的配置,实在是太不负责任了。

    从以下这个链接下载mod_wsgi 
    https://code.google.com/p/modwsgi/downloads/detail?name=mod_wsgi-win32-ap22py27-3.3.so

    这个包里面包括了32位和64位的编译版本号。下载完毕后选择 
    mod_wsgi-windows-4.4.12.tarmod_wsgi-windows-4.4.12Apache24-win32-VC10modulesmod_wsgi-py34-VC10.so
    由于我当前安装的Python是32位的,所以必须选择mod_wsgi-py34-VC10.so

    将mod_wsgi-py34-VC10.so拷贝至C:Apache24modules下,并更名为mod_wsgi.so。

    打开 c:Apache24confhttpd.conf 加入例如以下配置
    LoadModule wsgi_module modules/mod_wsgi.so

    从新启动httpd,假设没有报错。说明mod_wsgi模块在apache里面载入成功了。


    3. 安装Python

    我在这里安装的是Python 3.4。默认安装在c:Python34 文件夹下。
    Python 3.4安装时。最好选择将Python加入到系统文件夹。安装完毕后就能够直接执行Python的相关程序了,比如以下安装flask时用到的pip


    4. 安装flask

    很讽刺的是。我在尝试部署flask应用的过程中,竟然忘记装flask。导致我在网页上面看到apache爆出的错误信息。期初我还觉得是Apache的问题,经过查看c:Apache24logserror.log后才发现,原来是flask没有安装。
    直接打开cmd。执行例如以下命令
    pip install flask

    它会自己主动将flask和flask依赖的两个库所有装上,这太方便了。


    5. 创建Web App

    以下的代码直接拷贝而来
    创建C:Test_Web est.py
    from flask import Flask, request
    app = Flask(__name__)
    
    @app.route('/hello')
    def hello_world():
    name = request.args.get('name','')
    return 'Hello ' + name + '!'
    if __name__ == '__main__':
    app.run()


    创建C:Test_Web est.wsgi
    import sys
    
    #Expand Python classes path with your app's path
    sys.path.insert(0, "c:/Test_Web")
    
    from test import app
    
    #Put logging code (and imports) here ...
    
    #Initialize WSGI app object
    application = app


    注意,application一定不能改成别的。

    由于mod_wsgi在解析这个文件时,仅仅认application。


    另外。同IIS不同的时,不须要给C:Test_Web目录增加NETWORK SERVICE用户的訪问权限。



    6. 在Apache中配置网站

    仅仅须要将下面代码增加到C:Apache24confhttpd.conf文件里。
    <VirtualHost *:80 >
    ServerAdmin example@company.com
    DocumentRoot c:Test_Web 
    <Directory "c:Test_Web">
    Order allow,deny
    Allow from all 
    </Directory>
    WSGIScriptAlias /flasktest c:Test_Web	est.wsgi
    </VirtualHost>


    我对Apache的配置纯粹是外行。

    我的理解是一个VirtualHost节点就相当于在IIS里面的一个Web Site节点。

    假设我的理解有误,还望各位路过的Apache配置高手纠正。
    我在研究的过程中还看见有人将网站的配置放在另外一个conf文件里。然后将其包括至httpd.conf。




    7. 測试

    如今。打开浏览器。输入 http://localhost/flasktest/hello?name=CZY

    假设你看见网页上出现 Hello CZY! 说明你的网站执行起来了。

    剩下的工作就是以当前的工作为原型,開始Python的Web App开发之旅吧。

    假设你在尝试的过程中遇到什么问题。请给我随时在CSDN上留言。







































  • 相关阅读:
    mpvue 引入 vant-weapp 踩坑记录
    mac上hbuilder无法启动微信小程序调试窗口的解决办法
    mac 安装了xcode,flutter doctor 却检测不到展示叉叉
    vue 前端复制粘贴方式上传图片
    401 错误时,几个细节检查
    vue 图片src动态加载
    前端优化的大方向
    how to stop code runner in vscode(macOs)
    window server 2008 r2 TLS 升级1.2
    超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6936880.html
Copyright © 2011-2022 走看看