如何在Heroku上部署Django应用程序
Django是一个MVT网络框架,用于构建网络应用。它很强大,很简单,可以帮助网络开发者编写简洁、高效、强大的代码。在这篇文章中,我们将学习如何通过简单的步骤在Heroku上部署一个Django项目。
前置条件 :
- Django
- Postgres installed
Requirements.txt文件:在你的manage.py的同一目录下创建requirements.txt文件。在虚拟环境激活的情况下,在控制台运行以下命令。
(myvenv) $ pip install dj-database-url gunicorn whitenoise
(myvenv) $ pip freeze > requirements.txt
检查你的requirements.txt。它将根据你的项目中当前安装的软件包进行更新。
Procfile:在manage.py的同一目录下创建一个名为Procfile的文件,你会看到Heroku的标志作为Procfile的图标。在其中添加以下一行。
web: gunicorn <project_name>.wsgi --log-file -
这里项目名称将是你的settings.py所在的文件夹的名称。Procfile明确声明了应该执行什么命令来启动你的应用程序。
Runtime.txt文件:在你的manage.py的同一目录下创建runtime.txt文件。添加你想在你的网络应用中使用的python版本。
python-3.7.1
Settings.py:按照以下说明修改你的settings.py。
1.设置debug为False。
DEBUG = False
2.修改允许的主机。
ALLOWED_HOSTS = ['127.0.0.1', '.herokuapp.com']
3.要禁用Django的静态文件处理并允许WhiteNoise接管,请在你的 “INSTALLED_APPS “列表中添加 “nostatic”。
INSTALLED_APPS = [
'whitenoise.runserver_nostatic',
'django.contrib.staticfiles',
# ...
]
4.将WhiteNoise添加到MIDDLEWARE列表中。WhiteNoise中间件应该直接放在Django SecurityMiddleware(如果你正在使用它)之后,在所有其他中间件之前。
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
# ...
]
5.更新你的数据库设置。
import dj_database_url
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': '<database_name>',
'USER': '<user_name>',
'PASSWORD': '<password>',
'HOST': 'localhost',
'PORT': '',
}
}
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)
6.要从文件的原始位置(通常在STATICFILES_DIRS或应用程序的静态子目录中)直接提供文件,而不需要通过collectstatic命令收集到STATIC_ROOT;将WHITENOISE_USE_FINDERS设置为True。
WHITENOISE_USE_FINDERS = True
7.WhiteNoise带有一个存储后端,它可以自动处理压缩你的文件,并为每个版本创建唯一的名字,这样它们就可以安全地被永久缓存。要使用它,只需在你的settings.py中添加这个。
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
最终修改的settings.py的内容:
import dj_database_url
...
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', '.herokuapp.com']
INSTALLED_APPS = [
'whitenoise.runserver_nostatic',
#...
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
#...
]
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': '<database_name>',
'USER': '<username>',
'PASSWORD': '<password>',
'HOST': 'localhost',
'PORT': '',
}
}
WHITENOISE_USE_FINDERS = True
...
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Heroku account
1.安装你的Heroku工具带,你可以在这里找到:https://toolbelt.heroku.com/
2.在cmd或gitbash中运行以下命令,认证你的Heroku账户
$heroku login
这里要部署的项目(简历)的目录是活动的。
有时cmd或git bash可能会在某些命令中冻结。只要用CTRL+C就可以出来了。
3.部署前在git上提交任何修改。
$ git status
$ git add -A .
$ git commit -m "additional files and changes for Heroku"
4.选择你的应用程序名称,它将显示在域名上–[你的应用程序名称].herokuapp.com,并使用以下命令创建应用程序。
$ heroku create <your_app's_name>
5.调试。如果 collectstatic 在构建过程中失败了,会提供一个回溯,对诊断问题有帮助。如果你需要关于 collectstatic 运行环境的额外信息,请使用 DEBUG_COLLECTSTATIC 配置。
$ heroku config:set DEBUG_COLLECTSTATIC=1
6.禁用collectstatic。有时,你可能不希望Heroku代表你运行collectstatic。你可以通过DISABLE_COLLECTSTATIC配置来禁用collectstatic的构建步骤。
$heroku config:set DISABLE_COLLECTSTATIC=1
7.最后,做一个简单的git推送来部署我们的应用程序。
$ git push heroku master
8.当我们部署到Heroku时,我们创建了一个新的数据库,它是空的。我们需要运行migrate和creasuperuser命令。
$ heroku run python manage.py migrate
$ heroku run python manage.py createsuperuser
命令提示符将再次要求你选择一个用户名和密码。这些将是你在现场网站管理页面上的登录信息。
9.要打开你的网站,请运行。
$ heroku open
Resolving Errors
如果你看到你的网站上运行的应用程序错误。
$heroku logs --tail
它显示最近的日志,并为实时日志的流入留下会话。通过查看你的应用程序的实时日志流,你可以深入了解你的实时应用程序的行为并调试当前的问题。当你完成后,按Ctrl+C返回到提示。