一.准备app及开发环境

(若已经准备好可以跳过直接到后面的部署,下面我以原书作者源代码为示例)
1.在github上新建一个仓库(假设为myapp),然后克隆到本地(不要照抄下面的代码,只是个实例,根据自己情况更改)
$ git clone https://github.com/user/myapp.git
2.把作者的源码克隆到本地
$ git clone https://github.com/miguelgrinberg/flasky
执行git checkout,切换到最新的代码
3.$ git checkout 17d
然后全部copy到你的app目录下(但是不要复制替换自己独有的.git文件夹,README.md文件无所谓。.git文件夹是当前项目的版本库,每次commit的时候都会往版本库的当前分支提交更改,通常都是隐藏的,显示隐藏方法是打开文档,按F10显示工具栏,【工具】【文件夹选项】【查看】【隐藏文件和文件夹】【不显示隐藏文件、文件夹或驱动器】,确定
这时你发现目录下只有requirements文件夹,需求文件都在文件夹里,在本地执行pip install时没有任何问题,但是在部署的时候heroku不认识,它无法识别你的app运行环境,会拒绝你的push请求,因此要在app顶级文件夹根目录下新建requirements.txt,把生产环境需要的依赖包名字复制到文本中,如下面所示
Flask==0.10.1
Flask-Bootstrap==3.0.3.1
Flask-HTTPAuth==2.7.0
Flask-Login==0.3.1
Flask-Mail==0.9.0
Flask-Migrate==1.1.0
Flask-Moment==0.2.1
Flask-PageDown==0.1.4
Flask-SQLAlchemy==1.0
Flask-SSLify==0.1.4
Flask-Script==0.6.6
Flask-WTF==0.9.4
Jinja2==2.7.1
Mako==0.9.1
Markdown==2.3.1
MarkupSafe==0.18
SQLAlchemy==0.9.9
WTForms==1.0.5
Werkzeug==0.10.4
alembic==0.6.2
bleach==1.4.0
blinker==1.3
html5lib==1.0b3
itsdangerous==0.23
six==1.4.1
gunicorn==18.0
psycopg2==2.5.1
4.修改config.py文件,主要是配置电子邮件以及管理员邮箱
MAIL_SERVER = ‘smtp.qq.com’
MAIL_PORT = 25
FLASKY_MAIL_SUBJECT_PREFIX = ‘[Flasky]’ # 邮件抬头,改成你需要的
FLASKY_MAIL_SENDER = ‘Flasky example@gmail.com’# 管理员邮箱,改成你的

二.创建虚拟环境,然后安装依赖包、创建并迁移数据库

1.cd 到myapp的目录
2.创建虚拟环境,virtunalenv venv
3.激活虚拟环境,venv/Scripts/activate
4. 安装依赖包,pip install -r requirements.txt
或许你安装模块的时候,psycopg2 这个会最后会安装失败,这个时候,你把requirements.txt 文件里的psycopg2 先删掉,然后pip install -r requiremens.txt 然后,单独安装psycopy2 :pip install psycopg2。最后再把psycopg2 加到requirements.txt文件里。
然后你可以在本地运行一下,应该没有问题
$ python manage.py runserver
打开网站测试一下http://127.0.0.1:5000/
此处并没有结束,因为你发现没有数据库
把migrations文件夹下的versions里面的迁移文件全部删掉,自己重新创建(里面有10个.py文件,是数据库迁移文件,我在往heroku迁移中失败了无数次。重建一次性迁移的好处是部署简单,坏处是在测试单项功能时没法回滚,以后在开发自己的app时增加一个功能迁移一次,有利于回滚到上一次)ps:我并没有删掉
5.输入python manage.py db migrate -m “init migrations”
这时你可以看到前面的versions文件夹中出现一个文件就对了
6.然后更新数据库,输入python manage.py db upgrade
根目录下出现一个data-dev.sqlite文件就ok了,再在本地运行时全部功能就没问题了
【 再做一个铺垫工作
在文件夹中新建一个.gitignore文件,输入gedit .gitignore或者gvim .gitignore
内容如下(这是忽略文件,防止把不用的或者重要的文件上传到git,因此你可以根据自己的情况填写,你也可以把作者的复制过去,ls−a查看全部文件, ls -a查看全部文件, less .gitignore查看此文件):venv,.pyche,.sqlite】我并没有做,但是我发现在git bash可以操作,而且我把改动提交到Git仓库中,这些文件都不能提交,说明作者已经弄好。

三.heroku方面的准备

1.注册Heroku账户
说明:heroku 免费账户,最多只能存在5个app,想删除的话:
heroku apps
heroku apps:destroy your_app_name
这几个命令是通过 heroku apps –h (或者heroku –h)学会的。
2.安装Heroku Toolbel
先下载安装Heroku Toolbelt, 然后在命令行中输入

heroku login

结果:

C:\Users\Geek Lee>heroku login
heroku-cli: Installing CLI... 18.54MB/18.54MB
再次输入
(venv) C:\Users\Geek Lee\webapp>heroku login
Enter your Heroku credentials.
Email: 123456789@qq.com
Password (typing will be hidden):
Logged in as 1234567789@qq.com

保证网络良好(fanqiang)
3.创建程序:

(venv) C:\Users\Geek Lee\webapp>heroku create geekleee
Creating geekleee... !!    Name is already takenvenv) C:\Users\Geek Lee\webapp>heroku create geekleeee
Creating geekleeee... done
https://geekleeee.herokuapp.com/ | https://git.heroku.com/geekleeee.git

4.配置数据库

(venv) C:\Users\Geek Lee\webapp>heroku addons:create heroku-postgresql:hobby-devCreating heroku-postgresql:hobby-dev on geekleeee... free
Created postgresql-deep-71061 as DATABASE_URL
Database has been created and is available! This database is empty. If upgrading, you can transfer! data from another database with pg:copy
Use heroku addons:docs heroku-postgresql to view documentation

提升为主数据库

(venv) C:\Users\Geek Lee\webapp>heroku pg:promote postgresql-deep-71061
Ensuring an alternate alias for existing DATABASE... done, HEROKU_POSTGRESQL_NAV
Y
Promoting postgresql-deep-71061 to DATABASE_URL on geekleeee... done

同样后面这个 HEROKU_POSTGRESQL_MAUVE要跟你创建的数据库一致。
然后可以输入

(venv) C:\Users\Geek Lee\webapp>heroku config
=== geekleeee Config Vars
DATABASE_URL:               postgres://qwgbictjijwjom:XHwz6uH-zBbuoDrdINeVl-HwmV
@ec2-174-129-223-35.compute-1.amazonaws.com:5432/dcriterq8qjb66
HEROKU_POSTGRESQL_NAVY_URL: postgres://qwgbictjijwjom:XHwz6uH-zBbuoDrdINeVl-HwmV
@ec2-174-129-223-35.compute-1.amazonaws.com:5432/dcriterq8qjb66

看一下是否有DATABASE_URL

5.配置日志和电子邮件地址
书上代码
以及如下
要查看日志可以在Heroku客户端(就是登录Heroku后的命令行界面)中输入

heroku logs

或者

heroku logs --tail

接下来是配置日志和电子邮件,如果之前是17c版本可以直接看书上的内容,17b的话就要加上书上的代码
然后是设置环境变量

heroku config:set MAIL_USERNAME=<your-gmail-username> #电子邮件地址
heroku config:set MAIL_PASSWORD=<your-gamil-password> #stmp密码

6.运行生产Web服务器:
我的操作系统是Win10,这一步没办法运行,Unix系统应该可以。所以我这一步是直接略过的。接下来的添加依赖需求文件与Procfile文件直接安装书上来就可以了
7.使用Foreman进行测试:
这一步我的系统也是不行。但是可以用run-the-app-locally17代替,具体的看网页的内容吧。
补充一下:如果你可以用Foreman,应该要加入.env,那要记得在..gitignore加入.env,以防被添加到Git仓库中
8.添加依赖需求文件
9.添加Profile文件
10.使用Flask-SSLify启用安全HTTP:这个按照书上来就可以了
省略的都是代码,我的代码是git checkout 17c,所以不用写了,git checkout 17b需要不上代码!

四.执行git push命令部署和部署一次升级

1.将程序上传到Heroku服务器:在此之前,你要确保所有的改动都都提交到本地Git仓库,执行的操作如下:

(venv) C:\Users\Geek Lee\webapp>git add .idea(venv) C:\Users\Geek Lee\webapp>git add app(venv) C:\Users\Geek Lee\webapp>git add migrations(venv) C:\Users\Geek Lee\webapp>git add requirements(venv) C:\Users\Geek Lee\webapp>git add tests(venv) C:\Users\Geek Lee\webapp>git add tmp(venv) C:\Users\Geek Lee\webapp>git add venv
The following paths are ignored by one of your .gitignore files:
venv
Use -f if you really want to add them.(venv) C:\Users\Geek Lee\webapp>git add config.py(venv) C:\Users\Geek Lee\webapp>git add LICENSE(venv) C:\Users\Geek Lee\webapp>git add manage.py(venv) C:\Users\Geek Lee\webapp>git add Procfile(venv) C:\Users\Geek Lee\webapp>git add README.md(venv) C:\Users\Geek Lee\webapp>git add requirements.txt(venv) C:\Users\Geek Lee\webapp>git commit -m "last change"
[master d752bd7] last change1 file changed, 26 insertions(+)create mode 100644 migrations/versions/2133e3b2356_init_migrations.py(venv) C:\Users\Geek Lee\webapp>git push origin master
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 671 bytes | 0 bytes/s, done.
Total 5 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
To git@github.com:Geek-Lee/webapp.gitf8550d5..d752bd7  master -> master

说明:
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
到这一步,首先git status .检查一下,是不是所有改动都已提交到你的本地git 仓库。

PS:我说几个git 命令,你看你了解了吗。
git remote -v
git branch -v
git log --oneline --decorate
git add .
git commit -m "msg"
git log --pretty=format:"%h %s" --graph
git merge branch_name

2.然后就可以执行:

(venv) C:\Users\Geek Lee\webapp>git push heroku master
Counting objects: 143, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (133/133), done.
Writing objects: 100% (143/143), 120.12 KiB | 0 bytes/s, done.
Total 143 (delta 39), reused 3 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: -----> Python app detected
remote: -----> Installing python-2.7.12
remote:      $ pip install -r requirements.txt
remote:      Collecting Flask==0.10.1 (from -r requirements.txt (line 1))
·······
remote:        https://geekleeee.herokuapp.com/ deployed to Heroku
remote: Verifying deploy... done.
To https://git.heroku.com/geekleeee.git* [new branch]      master -> master

3.然后就可以执行这个命令了:

heroku run python manage.py deploy

正常的话应该应该会跟书上的示例一样。我这里出现了问题,只要是heroku run相关都会卡住不动,类似于下面这样,只能终止操作
我这里用以下这个命令代替

heroku run:detached python manage.py deploy

4.接着就是

heroku restart

至此程序就部署好了,可以通过
https://.heroku-kuapp.com访问
5.部署升级:

git add README.md        #把改动添加git上
git commit -m "注释"     #通过git推送到本地库,注明注释
git  push origin master  #把本地库推送到远程库master主分支

重点:!!!所有改动都提交到Git仓库后!!!(以上操作),执行以下命令:

heroku maintenance:on
git push heroku master
heroku run python manage.py deploy
heroku restart
heroku maintenance:off

参考文章:
【flasky/heroku/部署】(欢迎大家挑刺和补充)可能是目前为止最详细的了
(first update)终于成功部署在heroku上了,欢迎交流
分享一下flask程序部署到heroku平台的过程
说说自己用heroku部署flask web application遇到的几个坑

flask程序部署到heroku平台的过程相关推荐

  1. mongodb atlas_如何使用MongoDB Atlas将MERN应用程序部署到Heroku

    mongodb atlas 简介 (Introduction to MERN) In this article, we'll be building and deploying an applicat ...

  2. react部署在node_如何在没有命令行的情况下在3分钟内将React + Node应用程序部署到Heroku

    react部署在node In this tutorial we will be doing a basic React + Node app deploy to Heroku. 在本教程中,我们将进 ...

  3. gatsby_如何将静态Gatsby应用程序部署到Heroku

    gatsby by Kristin Baumann 克里斯汀·鲍曼(Kristin Baumann) 如何将静态Gatsby应用程序部署到Heroku (How to deploy a static ...

  4. Java游戏程序部署在不同平台的手机模拟器上

    手持终端设备,包括手机,智能手机,掌上电脑等等.手持终端设备平台类似于计算机中的操作系统,目前比较广泛见到的有以下几种 1.Linux: 2.Symbian: 3.BlackBerry: 4.Wind ...

  5. heroku_如何使用Express.js和Heroku将应用程序部署到Web

    heroku If you are new to the world of web development, you will spend a lot of time learning how to ...

  6. flask程序打包部署_如何使用Flask构建Web应用程序并将其部署到云中

    flask程序打包部署 by Salvador Villalon 萨尔瓦多·维拉隆(Salvador Villalon) 介绍 (Introduction) In each section, I wi ...

  7. Python编程:将Flask项目部署到免费服务器Heroku

    官网也给出了步骤,不过需要brew下载客户端,本文使用github部署,代码保持同步 页面打不开就挂全局代理 注册账号 https://www.heroku.com/ 新建APP https://da ...

  8. 在 Heroku 部署 PHP,部署在 Heroku 云

    部署在 Heroku 云 这本按部就班的教程描述了如何在 Heroku 云平台上部署一个 Symfony 网页应用程序.其内容基于在 Heroku 上出版的原创文章. 设置 创建一个新的 Heroku ...

  9. 如何用 Python 和 Flask 建立部署一个 Facebook Messenger 机器人

    这是我建立一个简单的 Facebook Messenger 机器人的记录.功能很简单,它是一个回显机器人,只是打印回用户写了什么. 回显服务器类似于服务器的"Hello World" ...

最新文章

  1. div块内的CSS中心文本(水平和垂直)
  2. 计算机网络管理云红艳电子版,计算机网络管理pdf
  3. Jquery怎样返回上一页
  4. JavaScript复习使用定时器的简易式诸葛大力轮播图
  5. 懒惰的人有福了——VS代码段编辑器SnippetEditor 可对vs所有代码段进行编辑和创建包括C#\J#\VB.NET等...
  6. Java中数学计算的相关方法
  7. 【数据结构与算法】完结
  8. LAMP-各PHP加速器性能剖析
  9. Python之旅Day14 JQuery部分
  10. 将BC26连接至OneNET平台
  11. 山西阳泉中考计算机科目,阳泉中考信息技术考试
  12. OSX: Mac不睡眠的排查
  13. mysql 汉化成中文版
  14. Python 爬取所有51VOA网站的Learn a words文本及mp3音频
  15. 如何提高团队开发质量
  16. 基于负熵的快速不动点算法
  17. 一个苹果成就了牛顿,一个苹果杀死了图灵。
  18. [TCP/IP] 基础知识总结
  19. shell运行python脚本报错没有包_脚本安装Discuz论坛(shell + Python 实现自动化安装)...
  20. 3D游戏引擎系列十一

热门文章

  1. java retry_Retry重试机制
  2. E. Gardener and Tree 树形DP
  3. 推荐系统召回策略之多路召回与Embedding召回
  4. 查看本机IP地址及子网掩码(netmask)
  5. 1212 带你们看看淘系的看家宝贝!
  6. 计算机详细配置快捷键,Win7电脑快捷键设置的方法
  7. 基于C语言的五子棋游戏设计与实现 课程报告+项目源码及可执行exe文件
  8. 35岁程序员真的要去卖炒饭了吗?
  9. SLOT的设计流程总结
  10. nginx配置转发时,提示no Route matched with those values