📌  相关文章
📜  如何在 Heroku 上部署 Django 应用程序?

📅  最后修改于: 2022-05-13 01:55:35.340000             🧑  作者: Mango

如何在 Heroku 上部署 Django 应用程序?

Django 是一个用于构建 Web 应用程序的 MVT Web 框架。它健壮、简单,可帮助 Web 开发人员编写干净、高效且功能强大的代码。在本文中,我们将学习如何通过简单的步骤在 Heroku 上部署 Django 项目。为此,一个 Django 项目应该已经准备好了,请访问以下链接来准备一个:https://www.geeksforgeeks.org/django-tutorial/

先决条件

  • 姜戈
  • 已安装 Postgres

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 .wsgi --log-file -

这里的项目名称将是您的 settings.py 所在文件夹的名称。 Procfile 明确声明应该执行什么命令来启动您的应用程序。

Runtime.txt 文件:在与 manage.py 相同的目录中创建 runtime.txt 文件。添加要用于 Web 应用程序的Python版本:

python-3.7.1 

Settings.py:按照以下说明修改您的 settings.py:

1.设置调试为假。

DEBUG = False

2.修改允许的主机。

ALLOWED_HOSTS = ['127.0.0.1', '.herokuapp.com']

3. 要禁用 Django 的静态文件处理并允许 WhiteNoise 接管,请将“nostatic”添加到“INSTALLED_APPS”列表的顶部。

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': '',
        'USER': '',
        'PASSWORD': '',
        'HOST': 'localhost',
        'PORT': '',
    }
}

db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)

6. 直接从原始位置(通常在 STATICFILES_DIRS 或 app 静态子目录中)提供文件,无需通过 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': '',
        'USER': '',
        '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 帐户

1. 安装您可以在这里找到的 Heroku 工具带:https://toolbelt.heroku.com/

2. 在 cmd 或 gitbash 中运行以下命令验证您的 Heroku 帐户

$heroku login

这里要部署的项目(简历)的目录是活动的

3. 部署前在 git 上提交任何更改。

$ git status
$ git add -A .
$ git commit -m "additional files and changes for Heroku"

4. 选择将显示在域名上的应用程序名称– [您的应用程序名称].herokuapp.com并使用以下命令创建应用程序:

$ heroku create 

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 push 来部署我们的应用程序:

$ git push heroku master

8. 当我们部署到 Heroku 时,我们创建了一个新数据库并且它是空的。我们需要运行 migrate 和 createsuperuser 命令。

$ heroku run python manage.py migrate

$ heroku run python manage.py createsuperuser


命令提示符将要求您再次选择用户名和密码。这些将是您在实时网站管理页面上的登录详细信息。

9. 要打开您的站点,请运行:

$ heroku open

解决错误

如果您在网站上看到应用程序错误,请运行:

$heroku logs --tail

它显示最近的日志并使会话保持打开状态以供实时日志流入。通过查看来自应用程序的实时日志流,您可以深入了解实时应用程序的行为并调试当前问题。完成后,按 Ctrl+C 返回提示。