前言

在heroku上部署项目其实很简单,本文将简单的将heroku的容器作用原理和简单的git推送和相应的一些额外的配置说明一下,整个过程不通过 heroku 命令行工具,或者网页操作,或者修改文件之。

本文主要面向python的,首先推荐读者参考一下 heroku 官方在github 上的项目,比如说 这个项目 。其是基于最近的django1.11的,看着这个模板理解一些东西,然后在heroku上设置好自动同github同步就可以了。

runtime.txt

这个文件用来执行python的版本,里面简单写上即可:

python-3.6.3

这样,远程heroku会帮你确定python运行环境为python-3.6.3。

requirements.txt

熟悉python开发的人都知道这个文件是什么意思,只是在heroku这里,是必须填写好的一个文件了,其和heroku远程调配好pip的环境有关。

Procfile

这个文件包含了一些进程类型声明,每个进程类(process type)由一行组成是:

<process type>: <command>

比如写着 web 的意思就是启动一个web server。

还有就是具体执行何命令来启动这个web server了。我们看到gunicron的官方文档写着对django项目如下支持语法:

$ gunicorn myproject.wsgi

或者明确指定django的settings位置
$ gunicorn --env DJANGO_SETTINGS_MODULE=myproject.settings myproject.wsgi

所以我们在教程中看到如下一行:

web: gunicorn myproject.wsgi --log-file -

上面的 --log-file - 在gunicron那边是把日志输出到默认stdout的意思。

通过git推送你的项目

你可以设置github自动同步,这样直接推送到你的github仓库即可。这里讲的是heroku默认的git url。

git remote add heroku  https://git.heroku.com/{{heroku_project_name}}.git

重要提示:添加的这个heroku的remote url直接和后面的heroku 命令行工具相关。 (参阅了这个网页

那个heroku命令行工具因为在windows下环境有点不好配,所以很多功能都略过了,不过 heroku run 功能是无法回避的,有些工作比如django的数据库初始化要手工输入命令完成:

heroku run python manage.py makemigrations
heroku run python manage.py migrate

django的静态文件

我在heroku的处理日志中看到这样一行:

python manage.py collectstatic --noinput

说明其自动处理好了django的静态文件问题。

django的数据库

在官网上管理好项目addon,然后看到 settings 有个 Config Vars 字段,里面定义了一个 DATABASE_URL 值。

然后 dj-database-url 这个pypi包会自动刷这个 DATABASE_URL 成为django的settings配置,如下配置:

# Update database configuration with $DATABASE_URL.
import dj_database_url
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)

heroku命令行工具

heroku create

大体类似于你在官网上操作新建一个app,只是名字是随机的。

如何加入数据库

heroku  pg:psql --app cheminfo

heroku addons:add heroku-postgresql:dev --app cheminfo