Python项目 | Web应用程序之Heroku部署

部署应用

将其部署到一台服务器,让任何有网络连接的人都能够使用它。为此,将使用Heroku,这是一个基于Web的平台,能够管理Web应用程序的部署。让“学习笔记”在Heroku上运行。

1、建立Heroku账户

建立账户,访问https://heroku.com/ ,并单击其中的一个注册链接。注册账户是免费的,Heroku提供了免费试用服务,能够将项目部署到服务器并对其进行测试。

其中注册的邮箱需要是gmail邮箱或者其他国外邮箱,国内邮箱不行。

2、安装Heroku Toolbelt

要将项目部署到Heroku的服务器并对其进行管理,需要使用HerokuToolbelt提供的工具。要安装最新的HerokuToolbelt版本,访问https://toolbelt.heroku.com/ ,并根据使用的操作系统按相关的说明做。

验证heroku是否安装,执行命令:heroku --version

3、安装必要的包

在活动的虚拟环境中执行如下命令:

pip install dj-database-url
pip install dj-static
pip install static3
pip install gunicorn

dj-database-url 包帮助Django与Heroku使用的数据库进行通信,dj-static 和static3 包帮助Django 正确地管理静态文件,而gunicorn 是一个服务器软件,能够在在线环境中支持应用程序提供的服务。(静态文件包括样式规则和JavaScript文件。)

4、创建包含列表的文件requirements.txt

Heroku需要知道项目依赖于哪些包,因此使用pip来生成一个文件,其中列出了这些包。同样,进入活动虚拟环境,并执行如下命令:

命令freeze 让pip将项目中当前安装的所有包的名称都写入到文件requirements.txt中。打开文件requirements.txt,查看项目中安装的包及其版本(如果使用的是Windows系统, 看到的内容可能不全):

“学习笔记”依赖于6个特定版本的包,因此需要在相应的环境中才能正确地运行。部署“学习笔记”时,Heroku将安装requirements.txt列出的所有包,从而创建一个环境,其中包含在本地使用的所有包。

接下来,在包列表中添加psycopg2 ,它帮助Heroku管理活动数据库。为此,打开文件requirements.txt,并添加代码行psycopg2>=2.6.1 。这将安装2.6.1版的psycopg2 ——如果有更高的版本,则安装更高的版本。

如果有必不可少的包在系统中没有安装,将其添加到文件requirements.txt中。最终的文件requirements.txt应包含上面列出的每个包。

5、指定Python版本

在活动的虚拟环境中,执行命令python --version:

上面的输出表明,使用的是Python 3.6.6。在manage.py所在的文件夹中新建一个名为runtime.txt的文件,并在其中输入如下内容:

注意 :如果出现错误消息,指出不能使用指定的Python版本,访问https://devcenter.heroku.com/ 并单击Python,再单击链接Specifying a PythonRuntime。浏览打开的文 章,了解支持的Python版本,并使用与你使用的Python版本最接近的版本。

6、为部署到Heroku修改settings.py

在settings.py末尾添加一个片段,在其中指定一些Heroku环境设置:


# Heroku设置
if os.getcwd() == '/app':    # 函数getcwd() ,它获取当前的工作目录 (当前运行的文件所在的目录),在Heroku部署中,这个目录总是/app
    import dj_database_url
    DATABASES = {
        'default': dj_database_url.config(default='postgres://localhost')
    }
    # 让request.is_secure()承认X-Forwarded-Proto头
    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
    # 支持所有的主机头(host header)
    ALLOWED_HOSTS = ['*']
    # 静态资产配置
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    STATIC_ROOT = 'staticfiles'
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )


导入了dj_database_url ,用于在Heroku上配置服务器。Heroku使用PostgreSQL(也叫Postgres)——一种比SQLite更高级的数据库;这些设置对项目进行配置, 使其在Heroku上使用Postgres数据库。其他设置的作用分别如下:支持HTTPS请求;让Django能够使用Heroku的URL来提供项目提供的服务;设置项目,使其能够 在Heroku上正确地提供静态文件。

7、创建启动进程的Procfile

Procfile告诉Heroku启动哪些进程,以便能够正确地提供项目提供的服务。这个文件只包含一行,将其命名为Procfile(其中的P为大写),不指定文件扩展名,并保存到 manage.py所在的目录中。 Procfile的内容如下:

这行代码让Heroku将gunicorn用作服务器,并使用learning_log/wsgi.py中的设置来启动应用程序。标志log-file 告诉Heroku应将哪些类型的事件写入日志。

8、为部署到Heroku修改wsgi.py

import os

from django.core.wsgi import get_wsgi_application
from dj_static import Cling

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'learning_log.settings')
application = Cling(get_wsgi_application())

导入了帮助正确地提供静态文件的Cling,并使用它来启动应用程序。

9、创建用于存储静态文件的目录

在Heroku上,Django搜集所有的静态文件,并将它们放在一个地方,以便能够高效地管理它们。

创建一个用于存储这些静态文件的目录。在文件夹learning_log中,有一个名称也为learning_log的子文件夹。在这个子文件夹中,新建一个名为static的文件夹,因此这个文件夹的路径为learning_log/learning_log/static/。还需在这个文件夹中创建一个占位文件,因为项目被推送到Heroku时,它将不会包含原来为空的文件夹。在目录static/中,创建一个名为placeholder.txt的文件,并输入:

This file ensures that learning_log/static/ will be added to the project.

Django will collect static files and place them in learning_log/static/.

是指出了在项目中添加这个文件的原因。

10、在本地使用gunicorn服务器

gunicorn不能在Windows系统上运行。

11、使用Git跟踪项目文件

Git是一个版本控制程序,能够在每次成功实现新功能后都拍摄项目代码的快照。无论出现什么问题(如实现新功能时不小心引入了bug),都可以轻松地恢复到最后一个可行的快照。每个快照都被称为提交 。

安装Git:

HerokuToolbelt包含Git,因此它应该已经安装到了系统中。然而,在安装HerokuToolbelt之前打开的终端窗口中无法访问Git,因此请打开一个新的终端窗口,并在其中执行命 令git --version :

配置git:

Git跟踪谁修改了项目,即便项目由一个人开发时亦如此。为进行跟踪,Git需要知道你的用户名和email。因此,必须提供用户名,但对于练习项目,可随便伪造一个email:

忽略文件:

无需让Git跟踪项目中的每个文件,因此将让Git忽略一些文件。为此,在manage.py所在的文件夹中创建一个名为.gitignore的文件。在该目录下,右键选择Git Bash 进入命令行,进入项目所在目录。输入 touch .gitignore ,生成“.gitignore”文件。在这个文件中输入如下内容:

ll_env/
__pycache__/
*.sqlite3

让Git忽略目录ll_env,因为随时都可以自动重新创建它。还指定不跟踪目录 \ _pycache__,这个目录包含Django运行.py文件时自动创建的.pyc文件。我们没有跟踪对本地数据库的修改,因为这是一个糟糕的做法:如果你在服务器上使用的是SQLite,当你将项目推送到服务器时,可能会不小心用本地测试数据库覆盖在线数据库。

提交项目

为“学习笔记”初始化一个Git仓库,将所有必要的文件都加入到这个仓库中,并提交项目的初始状态,如下所示:

(11_env) D:\Python3项目\learning_log> git init
Initialized empty Git repository in /home/zina/pcc/learning_log/.git/
(11_env) D:\Python3项目\learning_log> git add . 
(11_env) D:\Python3项目\learning_log> git commit -am "Ready for deployment to heroku."
[master (root-commit) dbc1d99] Ready for deployment to heroku.
43 files changed, 746 insertions(+)
create mode 100644 .gitignore
create mode 100644 Procfile
--snipcreate
mode 100644 users/views.py 
(11_env) D:\Python3项目\learning_log> git status
# On branch master
nothing to commit, working directory clean
(11_env) D:\Python3项目\learning_log>

执行命令git init ,在“学习笔记”所在的目录中初始化一个空仓库。

执行了命令git add . (千万别忘了这个句点),它将未被忽略的文件都添 加到这个仓库中。

执行了命令git commit -am commit message ,其中的标志-a 让Git在这个提交中包含所有修改过的文件,而标志-m 让Git记录一条日志 消息。

执行了命令git status ,输出表明当前位于分支master中,而工作目录是干净 (clean)的。每当你要将项目推送到Heroku时,都希望看到这样的状态。

12、推送到Heroku

在活动的虚拟环境中,执行下面的命令:

 

首先,在终端会话中,使用在https://heroku.com/ 创建账户时指定的用户名和密码来登录Heroku。然后,让Heroku创建一个空项目。Heroku生成的项目名由两个 单词和一个数字组成,你以后可修改这个名称。接下来,我们执行命令git push heroku master (见❸),它让Git将项目的分支master推送到Heroku刚才创建的仓库中; Heroku随后使用这些文件在其服务器上创建项目。❹处列出了用于访问这个项目的URL。 执行这些命令后,项目就部署好了,但还未对其做全面的配置。为核实正确地启动了服务器进程,请执行命令heroku ps :

将会打开一网页,点击log in,然后可以关闭网页。打开终端:

继续输入命令,让Heroku创建一个空项目(Heroku生成的项目名由两个单词和一个数字组成,以后可修改这个名称),执行命令git push heroku master ,它让Git将项目的分支master推送到Heroku刚才创建的仓库中; Heroku随后使用这些文件在其服务器上创建项目:

执行这些命令后,项目就部署好了,但还未对其做全面的配置。为核实正确地启动了服务器进程,请执行命令heroku ps :

输出指出了项目app一个月可以有550个小时的活跃时间,项目的活动时 间超过这个限制后,将显示标准的服务器错误页面,稍后我们将设置这个错误页面。

现在,可以使用命令heroku open 在浏览器中打开这个应用程序了。

 

看到“学习笔记”的主页,其样式设置正确无误,但还无法使用这个应用程序,因为没有建立数据库。

13、在Heroku上建立数据库

为建立在线数据库,再次执行命令migrate ,并应用在开发期间生成的所有迁移。

要对Heroku项目执行Django和Python命令,可使用命令heroku run 。

Heroku随后创建一个终端会话来执行命令migrate 。Django应用默认迁移以 及我们在开发“学习笔记”期间生成的迁移。 现在如果访问这个部署的应用程序,将能够像在本地系统上一样使用它。然而,看不到在本地部署中输入的任何数据,因为它们没有复制到在线服务器。

 

在部署过程中遇到的问题:

敲代码要仔细,报错了看报错原因解决问题。如果上传代码多次失败,可删除在heroku删除app,重新创建上传。仓库指定创建的远程仓库。


对该项目进行了一定的改进,访问链接:https://boiling-fortress-84551.herokuapp.com,后续有时间还会更新完善下一些功能。

上一章:Python项目 | Web应用程序之样式设置

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值