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 ...
随机推荐
- Shell脚本语法---在Makefile等文件…
1. Shell脚本语法 1.1. 条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Sta ...
- RequestParam注解的Url参数被省略时该如何处理
RequestParam注解的Url参数被省略时该如何处理 1.RequestParam的用法 ==================== RequestParam注解可以把包含在Url中的参数映射到U ...
- docker 制作本地镜像
docker commit 55ddf8d62688 py_wb # 容器ID, 容器名称tag py_wb IP地址:5000/my-web:20180511 # 远程registory地址 我的镜 ...
- Objects & Class
[Objects & Class] 1.定义一个类. 上述代码中,numberOfSides是实例变量,simpleDescription也是实例方法. 2.创建实例,使用实例. 3.init ...
- python子进程模块subprocess详解与应用实例 之一
subprocess--子进程管理器 一.subprocess 模块简介 subprocess最早是在2.4版本中引入的. subprocess模块用来生成子进程,并可以通过管道连接它们的输入/输出/ ...
- 【bzoj1015】星球大战starwar
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 5139 Solved: 2332[Submit ...
- laravel的模型关联之(一对多的反向)
一对多的反向 一对多的反向就相当于,一个用户有多篇文章,但是在显示文章模型的时候你又想显示这个用户的用户名,但是你只有用户id, 这时候就用到了一对多的反向,你用用户(User)模型里面定义了一对多来 ...
- Weblogic的安装、配置与应用部署
1. Weblogic安装 1.1 Linux下安装过程 安装环境: 操作系统: redhat-release-5Server-5.4.0.3 Weblogic版本: Weblogic 9.24 1) ...
- swfupload上传文件数量限制之setStats()
使用swfupload仿赶集的图片上传 SWFUpload是一个基于flash与javascript的客户端文件上传组件. handlers.js文件 完成文件入列队(fileQueued) → 完成 ...
- js 线程和进程的关系
进程(process)和线程(thread)是操作系统的基本概念 1.计算机的核心是CPU,它承担了所有的计算任务 2.单个CPU一次只能运行一个任务 3.进程它代表CPU所能处理的单个任务.任一时刻 ...