从2017年2月份年开始啃《Flask develoment》,二十几天的奋斗,今天终于有结果了,自己搭建得小博客终于上线https://fwyip.herokuapp.com
实现博客的基本功能:markdown编辑器写文章,评论,注册登录,修改用户资料等等,后续会继续学习添加功能,再需要就是美化要加强一些。
本身平台heroku是外国的产品,访问官网和博客的速度会比较慢,但是免费版作为我们用来学习是够用了,够良心,操作熟悉了就觉得非常简单。
注意:
书上的有两步我是直接忽略过去了,分别是使用Gunicorn(生产Web服务器)运行程序,和使用Foreman进行测试,我运行时都失败报错了,对后面部署没影响。很多网友都这样,应该是系统问题。其他按照书上讲的即可。
部署前准备:
不要小看这一步,这一步做好了,后面的部署上去才能顺利进行,不然会出现各种小问题折腾人,慎重。我的系统是win10。
在其他地方新建一个文件夹,比如我在桌面建立myheroku文件夹,把你自己git仓库理的代码全部复制过来 (包括venv) ,因为这样你可以随意更改删除测试,不影响原来的仓库。
保证你的代码进度是在17c这里,如果是在之前的就按着书把代码全部补充完,其他不用理先,并且要保证正确无误。如果代码有问题暂且没发现,也不用担心,后面过程肯定会出错,跟着再调试完,再提交,再推送,又出错,调试,推送···一直循环,我就是这么过来的T.T,心真累.
要在文件夹根目录下新建requirements.txt,把生产环境需要的依赖包名字复制到文本中。 因为在部署的时候heroku不认识,它无法识别你的app运行环境,会拒绝你的push请求。而在本地pip install时是没有任何问题的。
命令行 进入虚拟环境激活 myheroku\venv\Scripts\activate
进入 myheroku\文件夹,本地测试下代码
执行(venv)$ python manage.py runserver
,访问博客测试下功能,没问题即可。
执行(venv)$ python manage.py test
,让他自己测试走完。进入 myheroku\文件夹把数据文件data-dev.sqlite删了, 再进入myheroku\migrations\versions文件夹把里面的文件也删了。再重新建立, 命令行 执行
(venv)$ python manage.py db migrate
和(venv)$ python manage.py db upgrade
注册Heroku账户 https://www.heroku.com/ ,qq和163邮箱不能注册,outlook(首选,国内不用翻墙)和gmail是没问题的。
安装Heroku Toolbelt先下载安装Heroku Toolbelt,安装过程默认就好,如果之前没有安装git也会带帮你装的。这里有个git问题, git安装过程注意其中有一步:Adjusting your PATH environment 一定要选择第二项:Use Git from the windows commang prompt. 这样才能在CMD中使用Git命令,后面会方便许多。如果早已安装,建议在CMD中输入git,看能否识别,如果不能,建议重新安装git。
- 要使用Heroku,程序必须托管在远程Git仓库中,本地也要有一个一样的Git仓库。刚刚文件夹复制过来的文件,还没初始化,所以要初始化本地git仓库,等下才能推送到heroku平台。
进入 myheroku\文件夹 命令行 ,执行git init
,接着执行git add --all
和git commit -m "v1.0"
部署过程:
- 登录heroku
进入 myheroku\文件夹命令行
执行命令heroku login
输入你的heroku账号密码
刚刚安装git是选择第二个选项的好处就在这里, 因为我试过在Git Bash中可以用heroku命令,但是使用heroku login的时候你输完邮箱之后没办法输密码,而且选第一个的话你到时候要使用git命令的时候还要再切换到Git Bash。 (这一步按提示输入你注册时的邮箱跟密码,以后就不用输了,你的电脑会记住)
- 创建程序
执行heroku create <appname>
C:\Users\YHH\Desktop\myheroku (master)
(venv) λ heroku create fwyip
Creating fwyip... done
https://fwyip.herokuapp.com/ | https://git.heroku.com/fwyip.git
heroku中的程序名必须唯一
- 配置数据库:
书上的命令不适用了,应该是Heroku升级了。
创建数据库
执行命令heroku addons:create heroku-postgresql:hobby-dev
C:\Users\YHH\Desktop\myheroku (master)
(venv) λ heroku addons:create heroku-postgresql:hobby-dev
Creating heroku-postgresql:hobby-dev on fwyip... free
Database has been created and is available
! This database is empty. If upgrading, you can transfer
! data from another database with pg:copy
Created postgresql-opaque-21069 as DATABASE_URL
Use heroku addons:docs heroku-postgresql to view documentation
注意,这里已经把你的数据库提升为主数据库了( Created postgresql-opaque-21069 as DATABASE_URL )
所以现在是一步到位了。
- 配置其他环境变量
如:
heroku config:set FLASK_CONFIG=heroku
heroku config:set MAIL_USERNAME=<your-mail-username>
heroku config:set MAIL_PASSWORD=<your-mail-password>
注意:我这里用的是qq邮箱,亲测没问题, MAIL_SERVER = ‘smtp.qq.com’ ,MAIL_PORT = 587 ,记得开通smtp,密码是授权码。
- 可以检查下你的配置是否正确
执行heroku config
C:\Users\YHH\Desktop\myheroku (master)
(venv) λ heroku config
=== fwyip Config Vars
DATABASE_URL: postgres://lmuqyooezevixx:693c51d8b2fd66e24381d0006f7a66026151d9227d6ca5aafd7ae6029ae4115e@ec2-23-21-96-70.compute-1.amazonaws.com:5432/d8v00493or0hi2
FLASK_CONFIG: heroku
MAIL_PASSWORD: <your-mail-password>
MAIL_USERNAME: <your-mail-username>
- 推送至heroku服务器
推送前要保证文件夹里的文件修改全部提交git本地仓库~
现在就可以执行命令git push heroku master
大概是这样子就没问题啦
C:\Users\YHH\Desktop\myheroku (master)
(venv) λ git push heroku master
Counting objects: 126, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (115/115), done.
Writing objects: 100% (126/126), 35.34 KiB | 0 bytes/s, done.
Total 126 (delta 42), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Python app detected
remote: -----> Installing python-2.7.13
remote: $ pip install -r requirements.txt
remote: Collecting alembic==0.8.10 (from -r /tmp/build_40a15687c02ceb7b070437c0c90fb98c/requirements.txt (line 1))
remote: Downloading alembic-0.8.10.tar.gz (976kB)
remote: Collecting gunicorn==19.7.0 (from -r /tmp/build_40a15687c02ceb7b070437c0c90fb98c/requirements.txt (line 30))
remote: Downloading gunicorn-19.7.0-py2.py3-none-any.whl (112kB)
remote: Collecting psycopg2==2.7 (from -r /tmp/build_40a15687c02ceb7b070437c0c90fb98c/requirements.txt (line 31))
remote: Downloading psycopg2-2.7-cp27-cp27mu-manylinux1_x86_64.whl (2.1MB)
remote: Installing collected packages: SQLAlchemy, markupsafe, Mako, python-editor, alembic, six, html5lib, bleach, blinker, click, dominate, itsdangerous, werkzeug, jinja2, flask, visitor, Flask-Bootstrap, Flask-HTTPAuth, Flask-Login, Flask-Mail, Flask-SQLAlchemy, Flask-Script, Flask-Migrate, Flask-Moment, WTForms, Flask-PageDown, Flask-WTF, Markdown, Flask-SSLify, gunicorn, psycopg2 remote: Running setup.py install for SQLAlchemy: started
remote: Running setup.py install for SQLAlchemy: finished with status 'done'
remote: Running setup.py install for markupsafe: started
remote: Running setup.py install for Flask-SSLify: finished with status 'done'
remote: Successfully installed Flask-Bootstrap-3.3.7.1 Flask-HTTPAuth-3.2.2 Flask-Login-0.4.0 Flask-Mail-0.9.1 Flask-Migrate-2.0.3 Flask-Moment-0.5.1 Flask-PageDown-0.2.2 Flask-SQLAlchemy-2.1 Flask-SSLify-0.1.5 Flask-Script-2.0.5 Flask-WTF-0.14.2 Mako-1.0.6 Markdown-2.6.8 SQLAlchemy-1.1.5 WTForms-2.1 alembic-0.8.10 bleach-1.5.0 blinker-1.4 click-6.7 dominate-2.3.1 flask-0.12 gunicorn-19.7.0 html5lib-0.9999999 itsdangerous-0.24 jinja2-2.9.4 markupsafe-0.23 psycopg2-2.7 python-editor-1.0.3 six-1.10.0 visitor-0.1.3 werkzeug-0.11.15
remote:
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote:
remote: -----> Compressing...
remote: Done: 43.5M
remote: -----> Launching...
remote: Released v7
remote: https://fwyip.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy.... done.
To https://git.heroku.com/fwyip.git
* [new branch] master -> master
- 接着执行命令
heroku run python manage.py deploy
看到下面就没问题了,如果不是这样一般都会有问题
C:\Users\YHH\Desktop\myheroku (master)
(venv) λ heroku run python manage.py deploy
Running python manage.py deploy on fwyip... up, run.4711 (Free)
INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO [alembic.runtime.migration] Will assume transactional DDL.
INFO [alembic.runtime.migration] Running upgrade -> eaa24d4ef5ce, empty message
- 最后一步,重启程序
执行命令heroku restart
C:\Users\YHH\Desktop\myheroku (master)
(venv) λ heroku restart
Restarting dynos on fwyip... done
至此程序就部署好了,可以通过 https://appname.herokukuapp.com访问。
- 如果出现错误,推荐删除这次部署,修改代码,重头再来。 我就是重来很多次的人啊T·T
heroku apps:destroy <appname>
部署升级:
所有改动都提交到Git仓库后,执行以下命令:
heroku maintenance:on
git push heroku master
heroku run python manage.py deploy
heroku restart
heroku maintenance:off
参考资料:
《Flask Web开发 基于Python的Web应用开发实战》
(first update)终于成功部署在heroku上了,欢迎交流
分享一下flask程序部署到heroku平台的过程
【flasky/heroku/部署】(欢迎大家挑刺和补充)可能是目前为止最详细的了