Heroku对django的支持还是不错的,虽然没有pythonanywhere那样简单地给个shell随便折腾,关键功能也是没少。
主要参考:
官方文档 Getting Started with Django on Heroku
How to deploy django app to heroku?
注册登陆啥的就不说了,要注意的几个地方,一是不能用163邮箱,原因我也不太清楚,二是使用Heroku和git脱不了关系,我个人觉得这里的邮箱最好是也和git绑定了。
先开始看的是getting started with python不是django,不过它给的例子就是一个django project,先来看看这个例子好了。
安装Heroku Toolbelt
麻烦玩意儿= =为啥openshift和这个都要安装个啥才能传输,顿觉pythonanywhere方便死了。
安装的时候如果电脑上已经有了git就不用选full install了,选custom install然后把git和ssh取消掉。
还有个坑,文档里面写在cmd里面使用heroku login,但是并没有卵用,看了一个博客才知道要用git bash打开。。。
例子
走了一遍文档流程弄了一个sample app,这里的创建app都是用过heroku指令完成的,差不多是把一个本地文件和app通过某种方式连接起来然后同步代码。大概流程是这样
- heroku login 登陆,这里的账号密码我已经和git弄混了。。。
- git clone https://github.com/heroku/python-getting-started.git这里只是clone一个sample下来做示范,接下来的操作要在clone下来的文件夹里执行才可以。
- heroku create 创建一个app,可以接参数指定app名字,不接的话会随机一个,这一步会生成一个仓库https://git.heroku.com/app-name.git,然后这个仓库和刚刚clone下来的文件夹链接起来
- git push heroku master把这个sample app文件夹push到刚刚创建的远程仓库,这一步会有很多输出,因为在远程把requirement.txt里面的东西全安装了,这边都会有提示。
- heroku open 这个指令似乎是打开浏览器访问这个网页→_→
部署自己的应用
文档里面有些指令不是必须的,比如本地的虚拟环境等等,实际上这个部署过程的关键就在于和远端代码库的链接,我这里的情况是我有一个现成的本地app,要把它挂上去,在网站上我已经创建好了一个app,现在要把这两个链接起来。
步骤说的很清晰,不过还有一些细节,在这个app的文件夹需要一些配置文件。
配置文件
注意到之前例子的文件夹里面有一些配置文件
Procfile
web: gunicorn Sample_Project.wsgi --log-file -
具体什么意思不太清楚,不过要把Sample-Project改成自己的app文件夹名,具体就是装着wsgi.py这个文件的文件夹名字。
Procfile.windows
web: python manage.py runserver 0.0.0.0:5000
指令倒是看得懂但还是不明白起的什么作用
requirement.txt
dj-database-url==0.3.0
Django==1.8.1
django-postgrespool==0.3.0
gunicorn==19.3.0
psycopg2==2.6
SQLAlchemy==1.0.4
whitenoise==1.0.6
projects需要安装的套件,在自己的projects里面按照需要修改就行。
runtime.txt
python-2.7.9
python版本,额也是直接复制过来。
仓库链接
需要给本地仓库添加一个远程链接到Heroku的app仓库,不想和之前的弄混所以复制了一下文件夹,改了个名字,把.git文件夹删了。
然后根据上面的流程操作完毕,访问。
看得出来可以访问了,不过数据库没有同步过去。。访问页面都是数据库找不到的问题,于是又去百度数据库处理。
数据库配置
我的app文件夹有一个sqlite3的db文件,不过完全木有用…在Heroku应该是有一些别的方式使用数据库,需要几个步骤。
settings.py
import dj_database_url
DATABASES[‘default‘] = dj_database_url.config()
在数据库配置的部分后面加上。
生成数据库
然后依然是在git bash里面操作,代码更新完之后运行:
heroku run python manage.py makemigrations
heroku run python manage.py migrate
这下就没问题了。
版权声明:本文为博主原创文章,未经博主允许不得转载。