如何在Django 2.0上使用Heroku进行部署的步骤

這篇文章是關於初學者第一次在Heroku上部署Django應用程序的更新版本。

这次在Heroku上上传博客时,由于忘记了各种部署方法,所以记录在这里作为备忘。

前提 tí)

    • 一般的なネットワーク環境(ファイルをアップロードするので)

 

    • Djangoアプリ完成済み(sqlite3データベース使用)(virtualenv使用済み)

 

    • windows powershellが使える

 

    • gitインストール済み

 

    Herokuアカウント所有済み

环境

本次的环境如下所示:将使用django2.0
– windows10
– django 2.0
– python 3.6

最初的目录结构

DjangoApp/
├ env/(虚拟环境)
├ manage.py
├ db.sqlite3
├ DjangoApp/
│ ├ wsgi.py
│ └ setting.py
├ App/(应用本体)
└ .gitignore(排除env/、db和*.pyc)

准备好要开始了。

进程文件

听说这是告诉Heroku如何启动该应用程序的方式!☆

web: gunicorn アプリ名.wsgi --log-file -

运行时间.txt

给Heroku提供当前使用的Python版本的方法。

python-3.6.x

如果不安装最新的东西,部署时Heroku会发火,但对操作没有影响。

模块安装

请在您的设备上安装以下两个模块。

django-toolbelt

デプロイするときに役に立つモジュール一覧

whitenoise

静的ファイルを扱うときに必要

pip install django-toolbelt
pip install whitenoise

要求文本

只需运行pip freeze命令,即可使用用于列出Heroku上运行应用时所需的模块清单文件。

pip freeze > requirements.txt 

目前的目录结构

三件神器制作完成後

DjangoApp文件夹中包含了以下文件:
├ env/ (环境文件夹)
├ manage.py
├ db.sqlite3
├ DjangoApp/
│ ├ wsgi.py
│ └ setting.py
├ App/ (应用文件夹)
├ requirements.txt (新建)
├ runtime.txt (新建)
├ Procfile (新建)
└ .gitignore

在setting.py中进行修改。

数据库相关

在Django中,默認使用SQLite3作為數據庫,在Heroku中默認使用Postgres。因此需要更改Django處理的數據庫。

在setting.py文件中查找以下部分。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

请按照以下方式重写此部分。

import dj_database_url
db_from_env = dj_database_url.config()
DATABASES = {
    'default': dj_database_url.config()
}

将环境改为正式环境

当您在本地开发Django时,DEBUG应该是为True的(根据不同的环境可能会有所不同)。
在Heroku上,我们将DEBUG设置为False。
然而,如果DEBUG为False,即使出现错误,有时也无法在日志中记录下来,因此我们将添加一个配置来在控制台上以调试级别显示日志。

将以下内容添加到setting.py文件中。

DEBUG = False    # DEBUG=Trueから書き換え
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),
        },
    },
}

将生产环境和开发环境进行切换。

为了避免切换环境变得繁琐,建议根据运行环境的不同进行上述更改,这样会更加方便。

from socket import gethostname
hostname = gethostname()

if "COMPUTER-NAME" in hostname:
    # デバッグ環境
    DEBUG = True
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    ALLOWED_HOSTS = [] # よくわからんけど、これも大事らしい
else:
    # 本番環境
    DEBUG = False
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console': {
                'class': 'logging.StreamHandler',
            },
        },
        'loggers': {
            'django': {
                'handlers': ['console'],
                'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),
            },
        },
    }

    # DB設定
    import dj_database_url
    PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
    db_from_env = dj_database_url.config()
    DATABASES = {
        'default': dj_database_url.config()
    }
    ALLOWED_HOSTS = ['*']

请您输入计算机名作为您的主机名称。

将whitenoise添加到中间件中

让我们在setting.py中添加whitenoise到MIDDLEWARE。

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',    # 追加した
    'django.contrib.sessions.middleware.SessionMiddleware',
    ...
]

并添加。就白噪声的文档而言,写着要在’django.middleware.security.SecurityMiddleware’之后添加,但是否必需不明确。

编辑wsgi.py文件

现在是时候去修改一直没碰过的本地环境的wsgi.py文件了。
将wsgi.py文件编辑如下。

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

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "アプリ名.settings")
application = Cling(get_wsgi_application())

现在开始部署!

已经走到这一步,只剩下一点点了。
按照下面的方式输入命令,将代码部署到Heroku上吧。

git add .
git commit -am "Launching now!"

heroku login
> Enter your Heroku credentials.
> Email: hoge@huga.com
> Password (hidden):
> Logged in as hoge@huga.com

heroku create NAME
> https://NAME.herokuapp.com/ | https://git.heroku.com/NAME.git

git push heroku master
> なんか長々としたsomething

heroku run python manage.py migrate
> いつものmigrateコマンドが流れる

heroku run python manage.py collectstatic
> Copying...

heroku open

请访问https://NAME.herokuapp.com/,看看是否有效。
嗯,刚开始可能会出现某些错误,可能无法正常运行……

广告
将在 10 秒后关闭
bannerAds