跟着教程制作并改编了简单的web应用,第一个想到的当然是部署到托管网站。通常来说部署有三种选择,第一种是自己找个机子搭一个服务器,不太现实哈,第二种和第三种其实都算云服务器的内容,一种是租个虚拟机,从头开始搭建环境,常用的azure,aws,还有国内的阿里云等都提供了这样的解决方案,通常被称为 IaaS: Infrastructure-as-a-Service(基础设施即服务)。另一种则是使用更加方便的PaaS: Platform-as-a-Service(平台即服务),网页应用管理,应用设计,应用虚拟主机,存储,安全以及应用开发协作工具都可以使用这种方案呈现,代表的有leancloud,heroku,pythonanywhere等。 其中heroku既是flask狗书上推荐的部署方式,又是老牌的PaaS服务平台,同时github for students也提供了关联heroku的优惠政策。种种原因,我们在这儿选择heroku作为试水部署的网站。
首先我曾经在申用过heroku的app,作为中转redirect我的简书主页,过程很简单,只需要在VS中上传到github,然后在heroku中使用github的连接,傻瓜式配置。不需要数据库,不需要静态文件,因此还是很快可以配置成功的,主要是需要在requirement文件中加入这两个东西:
gunicorn psycopg2同时还要新建一个Procfile文件,并写句话:
web: gunicorn app:app需要注意的是,前面这个app意味着是你的程序或者程序包的名字,后面这个app即你在views视图中定义路径使用到的app:
@app.route('/', methods=['GET', 'POST'])这两个名字需要做相关的修改方可使用。
按照同样的方法,我开始对这个项目进行配置,这里出现过几个微不足道的小错误,一笔带过了,比如“Procfile”写成了“Profile”,又或者“Procfile”带了后缀,这些都是大家需要注意的。 Biuld Log如下:
-----> Python app detected -----> Installing requirements with pip -----> Discovering process types Procfile declares types -> web -----> Compressing... Done: 51.5M -----> Launching... Released v14 https://starinsun.herokuapp.com/ deployed to Heroku可能配置的build log如图所示,但是web应用还是有错误,这时就要看“Procfile”文件的内容是不是正确的对应了你的web应用。
虽然最终弄好了,但是可能由于SQLite这种数据库文件的形式不被heroku所支持,因此网站的信息会缓存一段时间然后消失,可能以后需要配置redit或者其他数据库。 只是一个简单的部署尝试,但是部署是真的很麻烦呀。
美丽的分割线~~~~~
之前说SQLite这种数据库文件不被heroku支持,其实是有误的,heroku与其他平台有所不同的是,他会对文件时不时的回收和初始化,因为SQLite存储的形式是.db文件,所以在heroku布置的网站往往更新来更新去,过一天还是老样子,这就必须要使用更健壮的数据库。
因为postgreSQL是heroku中支持的最完善的,因此尝试使用postgreSQL,使用起来也相对简单,如果按照李辉大神的书来的话代码都不需要改动,生成个数据库即可。
以后会尝试使用别的部署平台,heroku的连接一直抽风呀,很难受。
更新2020/2/9
heroku确实是一个非常强大的平台,如果网络不是问题的话,我更喜欢使用Hero库而不是netlify,虽然他们业务也不是很多重合。