将Django应用部署到Heroku的方法

首先

由于在Heroku上无法运行我用Django开发的应用程序,我记录下了遇到的问题。

假设

    • gitはインストール済

 

    • Herokuアカウント作成済

 

    • HerokuCLIインストール済

 

    デプロイしたいDjangoアプリは完成している

安装软件包

django工具包

pip install django-toolbelt

请点击这里查看详细信息。

安装这个将安装以下包。

    • Django

Django本体

psycopg2

PythonでpostgreSQLを扱いやすくする

gunicorn

HerokuでDjangoをデプロイするときに推奨されている、Webサーバー

dj-database-url
dj-static

白噪音

pip install whitenoise

这个库简化了为WSGI应用程序提供静态文件的分发工作。

修改Django项目

为了将其部署到Heroku,必须添加或修改以下文件。

    • requirements.txt

アプリを動かすために必要なパッケージを一覧としてまとめておくファイル

Procfile

Herokuプロセスの起動コマンド

runtime.txt

使用するPythonのバージョンを指定

.gitignore

sqliteとかが一緒に入らないようにする

wsgi.py

setting.pyから環境変数を受け取ってDjangoを動かしている…らしい

关于创建requirements.txt文件的要求

可以通过下列方式创建文件

pip freeze > requirements.txt

文件的内容如下所示。

dj-database-url==0.5.0
Django==2.2.3
django-toolbelt==0.0.1
gunicorn==19.9.0

Procfile(示例)

web: gunicorn <your-project-name>.wsgi --log-file -

运行时间文件(示例)

python-3.6.1

.gitignore 文件

*.pyc
venv
staticfiles
db.sqlite3

wsgi.py -> 网关接口.py

import os

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

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_project_name.settings")

application = Cling(get_wsgi_application())

将创建的文件放置在以下位置。

├─django_project_name
   │  db.sqlite3
   │  manage.py
   │  Procfile ☆
   │  requirements.txt ☆
   │  runtime.txt ☆
   │  .gitignore ☆
   │  
   ├─django_app_name
   │    admin.py
   │    apps.py
   │    forms.py
   │    models.py
   │    tests.py
   │    urls.py
   │    views.py
   │    __init__.py
   │          
   └─django_project_name
         settings.py
         urls.py
         wsgi.py ☆
         __init__.py

修改Django配置文件

接下来,需要修改设置文件「settings.py」。

数据库设置

在Heroku上,DB使用的是postgres(不能使用SQLite?)。因此,必须根据运行环境更改所使用的DB配置。另外,也要将DEBUG设置为False。

我参考了以下方法来学习写作:
– 使用Django2.0在Heroku上进行部署的步骤。

# hostnameが自分のpcの場合は、sqliteに接続する
# そうでない場合はherokuのpostgresに接続する
from socket import gethostname
hostname = gethostname()
if "myhostname" in hostname:
    DATABASES = {
       'default': {
           'ENGINE': 'django.db.backends.sqlite3',
           'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
       }
    }
    ALLOWED_HOSTS = []
else:
    # 本番環境ではデバッグモードはfalseにしておく
    DEBUG = False
    import dj_database_url
    db_from_env = dj_database_url.config()
    DATABASES = {
        'default': dj_database_url.config()
    }
    ALLOWED_HOSTS = ['*']

有关静态文件的配置

把DEBUG设置为false后,一些静态文件如CSS就不会应用了。
在将应用部署到Heroku或Web服务器时,需要将所有静态文件放置在一个地方。
首先,在settings.py中需要写下集中静态文件的位置等设置。

import os

# settingsファイルのパスが入る
BASE_DIR = os.path.dirname(os.path.abspath(__file__))

# manage.pyのcollectstaticをした時に、静的ファイルがどこに格納されるか指定する
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

# HerokuやWebサーバーに静的ファイルを見に行く場所を指定する
STATIC_URL = '/static/'

# 各アプリケーションのstatic以外に配信するディレクトリがある場合に追加
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, '..', 'django_app_name', 'static'),
)

另外,在安装了whitenoise后需要进行设置,将MIDDLEWARE中的’django.middleware.security.SecurityMiddleware’后面添加上去。

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware', 追加部分
    'django.contrib.sessions.middleware.SessionMiddleware',
    ...
]

STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

在添加上述说明之后,请执行下面的命令。

python manage.py collectstatic

然后,在指定的位置创建了一个static文件夹,并收集了静态文件。

├─django_project_name
   │  db.sqlite3
   │  manage.py
   │  Procfile
   │  requirements.txt
   │  runtime.txt
   │  
   ├─django_app_name
   │    admin.py
   │    apps.py
   │    forms.py
   │    models.py
   │    tests.py
   │    urls.py
   │    views.py
   │    __init__.py
   │          
   └─django_project_name
         static ☆
         settings.py
         urls.py
         wsgi.py
         __init__.py

将应用部署到Heroku

假设下面的内容已经准备好,我们不在这里讨论。

    1. 关于Heroku账户,请参考以下内容:

 

    1. Git

 

    1. 请参考此处

 

    1. Heroku命令行界面

 

    请从这里开始

请先提交一下

$ cd django_project_name
$ git init
$ git add .
$ git commit -m "はじめてのコミット"

安装HerokuCLI后,您将能够使用Heroku命令。请使用以下命令以在创建Heroku帐户时使用的信息登录。

$ heroku login

接下来,请转移到要部署的应用程序的重新装修,并输入以下命令。

$ heroku create
> Heroku上にアプリを作成する。

$ git push heroku master
> Heroku上にソースコードを渡す。

$ heroku run python manage.py migrate
> ここでもmigrateをしてあげる

$ heroku ps:scale web=1

$ heroku open

搞糟了!

以上则应该已经部署。

广告
将在 10 秒后关闭
bannerAds