通常情况下,基于开源软件的开发环境都会选择注入Linux等系统。但是,有些客观条件所限,我们不能选择环境,只能适应环境。
开源软件通常也会对Windows提供比较好的支持,这个毋庸置疑。但是对于基于开源软件开发的Web应用部署,很多情况下都是不能很好的支持。例如我用过的Ruby on Rails,早期有Mongrel的时代还真是幸福啊。因为Apache和Mongrel的集成是很容易的,Mongrel网站就有很浅显易懂的说明,按照说明一步步下来,就能够完成集成,但是后来Mongrel和RoR弄掰了,Ruby on Rails在Windows下同Apache的集成也就不能了!
扯远了,话说回来。Flask是基于Python的一个微框架,其各种扩展都属于热拔插性质的,根据需要加载进入就可以了。开发完毕后就需要部署,Python应用在Linux上的部署不是问题,问题是在Windows上的部署。
经过Google,学习材料,最后实践,下面这个方案是可行的:
软件预备:
Apache:著名的服务器软件,假设Apache安装路径为C:\apache;
Python:开发语言和环境,基于该语言的Flask在Windows上的安装开发等过程略掉,这里,假设已经完成的Flask应用路径为C:\flaskapp;
mod_wsgi:Web服务器网关接口
接下来是配置过程:
一、下载用于 Windows 平台的mod_wsgi,文件名字很长,mod_wsgi-win32-ap22py27-3.3.so 修改为我们更常用的前面提到的 mod_wsgi.so,然后将其放入 apache 文件夹内的 modules 内,在我的计算机上就是C:\apache\modules。
二、然后修改 C:\apache\conf 内的配置文件 httpd.conf,添加
LoadModule wsgi_module modules/mod_wsgi.so
语句,加载相关模块;
三、启用 vhost,找到# Virtual host 行,将下面的 Include conf/extra/httpd-vhosts.conf 从注释中放出;
四、编辑 C:\apache\conf\extra\httpd-vhosts.conf,添加如下段落
NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot C:\flaskapp ServerName localhost WSGIScriptAlias / C:\flaskapp\wsgi_handler.wsgi <Directory C:\flaskapp> Order deny,allow Allow from all </Directory> </VirtualHost
在启用新的默认主页的同时,禁用原来的 DocumentRoot "D:/Apache2.2/htdocs" ,否则就不会找到你设定的主页目录;
五、 现在万事俱备,只欠东风了。这东风就是上面设定的 WSGIScriptAlias / C:\flaskapp\wsgi_handler.wsgi 的wsgi_handler.wsgi 了。该文件是一个Flask应用与wsgi接口联通的文件,文件名可以自己定,但是扩展名应为.wsgi,内容如下:
import sys, os sys.path.insert(0, os.path.dirname(__file__)) from yourapplication import app as application
其中需要修改的是 yourapplication,修改为你的 Flask 应用的主文件名,例如我的应用主文件叫做 dog.py,这里我就要修改为
from dog import app as application
这句代码只能修改这里,别的地方不需要动。
六、 接下来,你就可以重启 Apache 来察看一下你的应用了。