β

在Heroku上搭建简单的Python Web 应用

Cloga的互联网笔记 1225 阅读
 

开发一个小应用放在互联网上给大家使用是一件成就感很高的事情,不过支持Python的免费空间不是很多,虽然GAE支持Python,不过由于众所周知的原因,在国内是很难打开GAE,这篇文章为大家介绍一下 Heroku ,heroku支持Python,并且在数据量不大的情况下是免费。

涉及到的工具

搭建本地的环境

sudo pip install Virtualenv
sudo pip install Virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
source /Library/Frameworks/Python.framework/Versions/2.7/bin/virtualenvwrapper.sh

这里source的路径可以通过: which virtualenvwrapper.sh 来确定

cd toyapp
git init
mkvirtualenv toyapp

创建一个虚拟环境好处在于:每个App都有其依赖的特定版本Python模块,不同版本的模块可能导致App无法运行,而在本地的Python主环境中只能安装一个版本的模块,并且不同的App也并不会需要安装主环境中的所有模块。

通过虚拟环境,我们可以为不同的环境安装不同版本的模块,同时也可以为App只安装需要必须模块的纯净环境。

通过mkvirtualenv命令创建虚拟环境后会默认进行这个虚拟环境

postactivate中的变量可以在运行workon(virtualenvwrapper提供的切换虚拟环境命令)后运行,比如,对于我们的项目,我们可以在postactivate添加cd命令,这样当我们切换到虚拟就可以进入到项目的目录中

vi $VIRTUAL_ENV/bin/postactivate

在虚拟环境中运行上面的命令,就可以编辑postactivate文件,在vim编辑器中,英文模式下输入i进入插入模式,添加cd 项目的路径,比如cd /Users/cloga/Documents/clogatoyapp,添加完毕后,按ESC键退出插入模式,英文模式下输入:wq保存修改并退出vim

用deactivate命令退出虚拟环境,再用workon toyapp命令进入虚拟环境,这时你会发现目录也会自动进入到项目的路径

deactivate
rmvirtualenv 虚拟环境

但是这个命令不会删除安装的模块,如果要删除所有按照的模块需要使用

rm -r 虚拟环境的文件夹

比如对于我的情况,需要使用

rm -r /Users/cloga/.virtualenvs/toyapp/

创建一个简单的Flask项目

pip install flask
pip freeze > requirements.txt

requirements.txt里面记录了当前环境中安装的各种模块及其对应版本,当上传到Heroku时,Heroku会按照这个文件安装对应的模块,如果以后有新增的模块,也需要及时通过pip freeze命令将模块版本信息添加到这个文件中

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
	return "Hello World!"
if __name__ == 	'__main__':
	app.run()

在terminal中运行 python app.py,这样一个最简单的Flask web app就开始运行了,访问http://localhost:5000/试一下吧

如果要关闭服务器,按CTRL+C

所以简单来说,app.py的作用就是当有人访问/页面时返回‘Hello World!’字符串

将项目部署到Heroku

免费的Heroku支持一个Dynos和10K以下记录的PgSQL

Toolbelt提供了Heroku的命令行工具

touch Procfile

在其中输入以下语句

web: gunicorn app: app

Profile是一个在应用根目录的文本文件,用于声明用于启动应用的语句

上面的一行语句声明了一个单一的进程类型:web以及运行它需要的语句。Web在这里很重要,它表明这个进程类型将隶属于Heroku的HTTP路由栈,并且在部署时接受web流量

pip install gunicorn
pip freeze > requirements.txt
heroku login

输入用户名和密码

heroku create toyapp
git add -A
git commit -m 'init'
git push heroku master

假设你创建了一个名字为test的github仓库,那么你可以通过下面的代码将本地的代码库与远程的Github库关联

git remote add origin https://github.com/cloga/test.git

通过 git push orgin master ,就可以将本地的代码库推送到github。

heroku open

PS:我在Heroku上放了两个小项目:

生成页面标签云

对应分析

 
作者:Cloga的互联网笔记
原文地址:在Heroku上搭建简单的Python Web 应用, 感谢原作者分享。

发表评论