Deploy Flask app to Apache on Windows
内容已过期,分割线以下为原文存档。
故事背景
这次我需要将一个Flask应用部署到本地的Windows服务器上。操作系统是64位的,程序是基于Python 3开发的,大体就是这样。
部署选项
根据Flask的部署指南,可供选择的方式还是蛮多的,IIS、Apache、nginx……
本着享受生活不折腾的原则,我们应该选择标准的、方便的、用户多的技术。
再按照页面上的提示,“Just remember that your Flask application object is the actual WSGI application“,于是,mod_wsgi(Apache)就成了我的不二选择。
Running mod_wsgi on Windows
在Windows上运行Apache with mod_wsgi需要一些技巧。
有4点是必须严格遵守的:
- 不能混用32位和64位的文件
- 安装Python时要选择“Install for all users”
- 构建Apache使用的编译器版本要与构建Python的一致
- 构建mod_wsgi使用的编译器版本要与构建Python的一致
下载
mod_wsgi的下载地址是https://github.com/GrahamDumpleton/mod_wsgi/releases,但不是每一次更新都有预编译好的二进制文件。
我使用的是mod_wsgi 4.4.12,对应的Python是3.3.5或者3.4.2。
Apache的下载地址是https://www.apachelounge.com/download/VC10/,我使用64位的版本。
安装
安装Python时要选择“Install for all users”。另外,自定义项目里的“Add python.exe to Path”也最好选上。
把Apache24文件夹解压缩到c:\Apache24。(因为配置文件里是默认的这个路径,如果要放在别的地方,就自己修改下相应的配置)
ps.为了方便排错,可以在这里先测试一下Apache是否正常。运行httpd.exe,然后访问http://localhost/,如果没有问题应该可以看到测试页。
把mod_wsgi-py34-VC10.so复制到c:\Apache24\modules目录下,文件名改成mod_wsgi.so,然后把
LoadModule wsgi_module modules/mod_wsgi.so
添加到配置文件(httpd.conf)里。
测试
将测试文件保存为c:\mydir\myapp.wsgi
def application(environ, start_response):
status = '200 OK'
output = b'Hello World!' response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers) return [output]
在配置文件里添加:
<VirtualHost *:80>
WSGIScriptAlias /myapp c:\mydir\myapp.wsgi
<Directory c:\mydir>
Require all granted
</Directory>
</VirtualHost>
重新运行httpd.exe,然后访问http://localhost/myapp,看到Hello World!就说明安装成功了。
部署Flask应用
使用pip安装Flask:
pip install flask
把Flask例程保存为c:\mydir\hello.py
from flask import Flask
app = Flask(__name__) @app.route("/")
def hello():
return "Hello World!" if __name__ == '__main__':
app.run()
mod_wsgi要求WSGI应用的入口叫“application”,所以我们还需要创建一个.wsgi文件来做转换。把下面的代码保存为c:\mydir\myapp.wsgi
import sys
sys.path.insert(0, 'c:\\mydir')
from hello import app as application
将c:\mydir加入系统环境的Path变量是为了确保我们的hello模块可以被解释程序找到。
重启Apache,查看一下配置好的成果吧。
扩展阅读
Working with Virtual Environments
Deploy Flask app to Apache on Windows的更多相关文章
- Flask + mod_wsgi + Apache on Windows 部署成功(随时接受提问)
前言 说是前言,纯粹就是吐槽. 假设你赶时间.全然能够跳过这部分,我保证不会在这里隐藏不论什么实用的内容. 人上年纪后.可能冲劲不足,我花了大概两周的时间才成功的将flask部署到windows上.还 ...
- Docker:Deploy your app
Prerequisites Install Docker. Get Docker Compose as described in Part 3 prerequisites. Get Docker Ma ...
- Docker5之Deploy your app
Make sure you have published the friendlyhello image you created by pushing it to a registry. We’ll ...
- APACHE 在windows下的配置
目前apache在windows下只支持到2.2 所以php必须下载相应的线程安全的 然后打开apache的配置页面 listen directory 和 load_module修改 httpd -k ...
- Inside Flask - app.py - 2
Inside Flask - app.py - 2 Flask 初始化参数 Flass 类是 Flask 框架的核心,一个 flask 对象处理视图函数注册.URL规则.模板配置.参数设置等等. 一般 ...
- Inside Flask - app.py - 1
Inside Flask - app.py - 1 除 werkzeug 和 jinja2 等依赖库外,app.py 是在 Flask 的 __init__.py 中导入的第一个 Flask 自身的模 ...
- 部署django - Apache + mod_wsgi + windows
部署django - Apache + mod_wsgi + windows 1.环境 django 1.6.2 python 3.3 32位 apache 2.4.7 32位 一个可以使用的djan ...
- IIS服务器 远程发布(Web Deploy)配置 VS2010 开发环境 Windows Server 2008服务器系统
原文:IIS服务器 远程发布(Web Deploy)配置 VS2010 开发环境 Windows Server 2008服务器系统 asp.net 网站有三种常用的发布方式:分别是拷贝开发机上发布好的 ...
- Flask源码阅读-第四篇(flask\app.py)
flask.app该模块2000多行代码,主要完成应用的配置.初始化.蓝图注册.请求装饰器定义.应用的启动和监听,其中以下方法可以重点品读和关注 def setupmethod(f): @setupm ...
随机推荐
- Document.location.href和.replace的区别
转自:https://www.cnblogs.com/GT_Andy/archive/2007/10/31/1922138.html 1 Document.location.href和.replace ...
- bash shell笔记6 脚本控制
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/522415 知 ...
- xcode恢复语法高亮
[xcode恢复语法高亮] 非常简单,在Organizer中删除derivedData.
- 2014年:Linux和开源的福祸之年
(1)Heartbleed漏洞 Heartbleed漏洞,是今年开源软件曝出的最大糗事.Heartbleed漏洞是OpenSSL的重大漏洞,这项严重缺陷(CVE-2014-0160)的产生是由于未能在 ...
- c语言学习笔记 if语句的条件判断
可能经常会看到错误的if语句示范,比如这样的: if(a=6) { printf("hello"); } if语句块执行的条件是if条件的运算结果不是0则执行if语句块. a=6这 ...
- linux信号基本概念及如何产生信号
linux信号基本概念及如何产生信号 摘自:https://blog.csdn.net/summy_j/article/details/73199069 2017年06月14日 09:34:21 阅读 ...
- canvas基础学习笔记
canvas基本用法 1.什么是canvas(画布) <canvas> 是 HTML5 新增的元素,可用于通过使用JavaScript中的脚本来绘制图形,例如,它可以用于绘制图形,创建动 ...
- SQLServer跨库查询--分布式查询
出处:http://www.cnblogs.com/doosmile/archive/2012/03/16/2400646.html --用openrowset连接远程SQL或插入数据 --如果只是临 ...
- 【Head First Java 读书笔记】(一)基本概念
Java的工作方式 你要做的事情就是会编写源代码 Java的程序结构 类存于源文件里面 方法存在类中 语句存于方法中 剖析类 当Java虚拟机启动执行时,它会寻找你在命令列中所指定的类,然后它会锁定像 ...
- Linq 左连接 left join
Suppose you have a tblRoom and tblUserInfo. Now, you need to select all the rooms regardless of whet ...