Heroku实战入门(二)简单实战

书接上文。

这回我们来真正部署一个应用。

一、原理讲解

实际操作之前,先来简单地了解一下应用的部署原理吧。

heroku应用的部署是基于git的。git是什么呢,简单来说就是一个版本控制系统。它可以记录你的每一次更改并允许你返回到之前的任意一次更改。如果真的要详细讲git的话完全可以写一本书,并且有人已经写出来了这本书,我将它的汉化版制作成了电子书格式,需要的同学可以自行下载。

git的操作流程简单概括就是两步:1、本地开发;2、提交到服务器。

heroku的应用部署也是符合这两步的,所以熟悉git的话操作起heroku来就很简单了。

下面我们就用一个实际的例子来讲解一下吧,同样,我们按照这两步来进行介绍。

二、实战heroku——本地开发

因为我使用的是Python的django框架,所以就以部署django应用为例。

heroku官方已经提供了一个部署django的详细教程(不得不说heroku的文档写的真是好),我们就按照这个教程的步骤来进行操作。

首先是进行环境的配置,我们需要安装Python。Python可以直接从官网下载需要的版本, 我使用的是2.7.3。

安装完Python和django之后是安装virtualenv。

heroku官方推荐使用virtualenv进行开发。virtualenv是一个虚拟环境,好处是在virtualenv中开发的项目不会影响到真实环境。大家都知道Python有各种各样的插件,如果都安装在真实环境的话会很难管理。使用虚拟环境就可以避免这个问题。

当然,如果你不愿意使用虚拟环境可以直接跳过这步。

运行 pip install virtualenv 或者 easy_install virtualenv 来进行安装

安装完virtualenv之后,我们创建一个django项目:

mkdir hellodjango && cd hellodjango

这条命令创建一个名为hellodjango的目录并进入这个目录中。你可以把hellodjango换成你喜欢的名字,不过最好不要用中文,可能会导致一些错误。

然后运行:

virtualenv venv --distribute

来创建一个虚拟环境,这个虚拟环境的名字是venv。

创建完成后,运行:

source venv/bin/activate

来进入虚拟环境,运行完之后大家可以看到你的命令行最前面多出一个virtualenv标志,这就代表着你现在处于虚拟环境内部了。

然后我们运行:

pip install Django psycopg2 gunicorn dj-database-url

来安装依赖包。

django是我们要使用的开发框架;psycopg2是django连接PostgreSQL数据库的插件;gunicorn是一个WSGI服务,他的用处简单来说就是运行你的项目;dj-database-url是heroku需要的插件,因为heroku使用的是云PostgreSQL服务器,所以需要这个插件来和数据库进行连接。

依赖包安装完之后,我们运行:

django-admin.py startproject hellodjango .

在当前目录下创建一个新的django项目,名字是hellodjango,你可以换成你喜欢的名字。

我们可以运行:

cd hellodjango && python manage.py runserver

然后打开浏览器输入 http://127.0.0.1:8000  如果看到 It works! 就说明项目创建成功了。

下面是很重要的一步,关系到我们的应用能不能在服务器上正常运行,大家要仔细看哦。

我们在 hellodjango 目录(就是manage.py的父目录))中创建一个Procfile文件,不带任何扩展名;然后写入:

web: gunicorn hellodjango.wsgi

然后保存。

这步是干什么的呢?实际上本地开发是用不到的,这步是告诉服务器使用gunicorn来运行我们的应用。

然后,同样在 hellodjango 目录(manage.py的父目录)中运行:

pip freeze > requirments.txt

这步的目的是生成依赖包列表,这样提交到服务器之后会自动安装依赖包。

最后一步,django中的设置。

我们在settings.py文件的最下面写入:

import dj_database_url
DATABASES['default'] =  dj_database_url.config()

# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

然后保存。这步的作用就是配置django连接数据库。

这里我多说一句,因为django的配置路径是不允许相对路径的,所以只能使用绝对路径。那我们也不知道服务器上的绝对路径是什么啊,怎么办呢?有一个办法就是使用Python自带的模块获取当前目录然后组合出来绝对路径。比如templates的路径我们可以用

PROJECT_DIR = os.path.dirname(__file__) # this is not Django setting.
TEMPLATE_DIRS = (
    os.path.join(PROJECT_DIR, "../templates"),
    # here you can add another templates directory if you wish.
)

 来代替,这样无论是本地还是服务器端都可以正常运行。

好了,终于配置完成了~

下面就该进行具体的开发了,因为这个教程是讲解使用heroku的,所以这里就不详细讲了,感兴趣的同学可以自己去百度 djangobook 来学习一下django。

三、实战heroku——提交到服务器

假设我们已经进行了一些开发,这时候我们就想提交一下了。毕竟自己本地开发谁也看不到嘛,提交上去就可以被所有人访问了。

要提交到服务器,我们进行下面的操作。

在 hellodjango 目录(同上一个括号= =)中运行:

git init

git add .

git commit -m "my django app"

这三个命令是什么意思呢,我分别解释一下。

第一行git init是在当前目录创建一个git库,相当于初始化。

第二行是将当前目录的所有变更文件加入库中(实际并不完全是这个意思,为了方便大家理解我就说得通俗一点)。

第三行是提交变更到本地库。

为什么已经加入变更文件了还要提交变更呢,这个涉及到git的原理,我估计再讲这个大家就更乱了,所以就不详细讲了。只要记住,提交到服务器之前必须运行 git add .git commit -m "something" 就行。something你可以随便填写。

下一步就是提交到服务器了。

因为我们是第一次提交,所以先运行:

heroku create

命令来告诉heroku给我们创建一个云服务器,然后运行:

git push heroku master

将我们的本地库提交到服务器上。

这时候我们的应用就已经提交完成了,我们可以运行:

heroku open

就可以在浏览器中看到我们的网站了。

到这里,整个流程就已经讲完了,大家可以不断重复本地开发和提交到服务器来进行项目的迭代开发,heroku会帮你处理好服务器端的所有事项。

四、总结

第一次写这样的教程,自己文笔也不行,感觉写起来很吃力。可能大家看起来更吃力吧。。。

个人觉得heroku是一个很好的云平台所以想和大家分享一下,让更多的人知道heroku,所以写了这个么教程。

如果大家有什么不清楚的地方或者我有什么写错的地方都欢迎提出!

谢谢。

原文地址:https://www.cnblogs.com/numbbbbb/p/3056226.html