个人认为狗书最难的地方就是部署,尽管我这是第3次部署,但还是花了一天的时间才完成。期间遇到了各种坑爹的问题,一卡就是4,5个小时,有时候你上stackoverflow去找也找不到解决方法。因此这一章主要记下我跌到过的坑
1 创建仓库
如果你的程序没有托管在Git仓库中,那么必须在自己电脑上创建一个仓库。
cd到程序所在位置,我这里是/xhu
git init
或者
git init xhu #在xhu目录下创建.git文件
.git 文件就是仓库,和你自己写的程序在一个目录中
2 下载heroku客户端
根据书上的网址下载,里面有个git安装选项,如果你自己已经安装了git,可以把这个选项勾掉。我自己因为之前部署的时候已经下载过heroku,但是又重新下了一遍。虽然在安装过程中有自动添加到Path中,但是当我运行git-cmd的时候,有多次执行’heroku’显示不可执行文件,我反复确认了多次Path,发现heroku就在path内,怎么老报错呢?后来才知道,我电脑上有2个heroku,之前的放在C盘,这次放在F盘,两个都在Path里,可能冲突了。于是我把之前C盘的删除,完美解决问题。
3注册heroku账号
这个没什么说的,登录网站,注册账号。然后在命令行直接输”heroku login”
4 ssh公钥
这个书上说login会自动创建并上传,我这边是在F盘顶部目录有个ssh文件夹
里面有个config文件
可能里面的内容需要改写,如果是ssh相关报错的话
5 用heroku客户端创建程序
heroku create <Appname>
之后会得到两个URL,左边的是你的网页URL,用来访问。右边的是Heroku为你分配的Git服务器URL。书上是自动将这个服务器地址添加为本地Git仓库的远程服务器。但是这里我们可能需要手动添加
cd 到.git文件夹所在的目录 (即cd xhu)
git remote add <自定义名称> [url]
[url]:是分配给你的服务器地址,也就是你得到的右边的URL
5配置Postgres数据库(No Such Table问题)
这个数据库配置我卡了6个小时,不是说配置有问题,而是出在我自己的config.py代码中,按照书上说的配置就行。如果你第一次输入
heroku addons:add heroku:postgresql:dev
得到的应该是一个DATABASE_URL,没有颜色URL。而书上得到的是一个棕色URL,如果你也想有个颜色的话,可以再输入一次上面的代码,创建一个新的Postgres数据库,这次就能得到一个有颜色的URL了,之后再把这个有颜色代号的数据库URL赋值给DATABASE_URL。也就是说DATABASE_URL的值就是Postgres数据库了
说下我自己为什么卡了6个小时,我这边Postgres数据库配置没问题,但是我config.py代码中prodconfig指定的数据库url有误,书上是
os.environ.get('DATABASE_URL') or 'sqlite:///'+ os.path.join(database, 'data.sqlite')
我自己为了开发简便,把os.environ.get(‘DATABASE_URL’)去掉了,只留了sqlite部分。而我的.gitignore文件里面是把sqlite类型的文件在push的时候删除的
这就导致我虽然用heroku config:set FLASK_CONFIG=heroku
指定了使用herokuconfig配置,使用的数据库URL是os.getenv(‘DATABASE_URL’)也就是上面的Postgres数据库,但是我删掉了,也就是说我在heroku端没有数据库。这也就引发了之后的我在deploy之后打开网页,出现”internal server error”,然后查看日志发现总是说”No such table”的原因
6添加依赖文件和Procfile文件
7 改动程序
git add .
git commit -m '说明'
这两个代码是用来将你所有的改动都提交到本地Git仓库中的,包括你第一次部署,先运行这两行代码把你的程序都加到Git仓库中,还有就是你要添加功能时,代码有改动后,再次运行这两行代码,把改动提交上去。
8.gitignore
.gitignore文件里列出的都是些你不想push的文件,创建方式是选择你要创建的地方,鼠标右键,然后选择git bash here ,跳出来命令行后输入 touch .gitignore
9Push
本地仓库提交好后就该Push到远程服务器上了,也就是你之前
git remote add <自定义名称> [远程服务器URL]
你之前已经命名了远程服务器的名称了,这里我们就命名为x吧,下面就是把本地仓库push到x中
git push x master
之后再按照书上最后的2步就成功了。
10 找错
当网站上线后,出现错误时,使用heroku logs或heroku logs -t来查找错误
11 Can’t run more 1 Free size dynos问题
当运行
heroku run python manage.py deploy
报上面的错误。原因应该是dynos超了,dyno是Heroku的计算单元,依次收取服务费的。既然超了,解决方法就是释放掉一些
heroku ps #得到含有[run:数字]代码,如run:988
heroku ps:stop [run:数字] #自己看下run后面数字是多少,替换就行
12No default language 问题
当运行git push [远程服务器名] master时,报上面的错误。应该是requirements依赖包的问题,看下命名和里面的代码