DjangoをHerokuにアップロードするまでの手順

ブログでのアウトプット習慣が染み付いてきてコード書きたい!!的な欲望が出てきました。そこで、目に見える成果としてWEBアプリケーションを作ってみることにしました。まずは公開する手順をさっさと身につけようと思い、Djangoをherokuにあげてみることにしました。これはその手順です。

ほぼこちらの記事通りにやりましたが、バージョンが違ったり、ところどころ躓いたところがあったので、 自分なりにアレンジしているところがあります。

qiita.com

TL;DR

  • Djangoをherokuにあげるよ
  • WEBアプリケーションを公開できるよ
  • やった気になれる(戒め

目次

  1. 前提条件
  2. Djangoのプロジェクトを作成する
  3. gitにプッシュする
  4. Herokuにデプロイする

前提条件

Djangoのアプリを作成する

仮想環境に入ります。 まずは、仮想環境を作成しDjangoをインストールする。

YOUR PC:workspace user$mkdir django_heroku
YOUR PC:workspace user$python -m venv django_heroku/
YOUR PC:workspace user$cd django_heroku/
YOUR PC:django_heroku user$ source bin/activate
(django_heroku) YOUR PC:django_heroku user$ pip install django
(django_heroku) YOUR PC:django_heroku user$ pip install django-toolbelt

プロジェクトを作成し、マイグレーションをする

(django_heroku) YOUR PC:django_heroku user$ django-admin.py startproject config ./
(django_heroku) YOUR PC:django_heroku user$ python manage.py migrate

サーバを起動する

(django_heroku) YOUR PC:django_heroku user$  python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
June 16, 2018 - 07:19:32
Django version 2.0.6, using settings 'config.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

ブラウザを立ち上げて http://127.0.0.1:8000/にアクセスし、下の画面が出れば成功。(versionによっては違う画面が出ることがあるかも知れません

f:id:yoshitaku_jp:20180616162145p:plain

gitにプッシュする

vim .gitignoreでファイルを作成する

*.pyc
staticfiles
db.sqlite3

gitにコミットとプッシュする

git init
git add .
git commit -m "create Django app"

Herokuにデプロイする

foremanが最新バージョンだと動かないらしいので、0.61をインストールする

初心者がHerokuでハマったポイント - 暗号通貨.py

gem install foreman -v 0.61

Procfileファイルとrequirements.txtファイルを作成する

echo "web: gunicorn config.wsgi --log-file -" > Procfile

pip freeze > requirements.txt

vim config/settings.pyでsettings.pyの末尾に下記の内容を追加する

# Parse database configuration from $DATABASE_URL
import dj_database_url
db_from_env = dj_database_url.config()
DATABASES['default'].update(db_from_env)

# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

# Allow all host headers
ALLOWED_HOSTS = ['*']

# Static asset configuration
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

vim config/wsgi.pywsgi.pyの内容を書き換える

"""
WSGI config for config project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/
"""

import os

from dj_static import Cling #文を新しく記述する
from django.core.wsgi import get_wsgi_application

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

application = Cling(get_wsgi_application()) #文を変更する

Herokuアプリを作る

Heroku Command Line Interface (CLI) をインストールしていない場合、インストールする

brew install heroku/brew/heroku

devcenter.heroku.com

Herokuにログインしていない場合、ログインをする ユーザ名とパスワードは、Herokuアカウントを作成したときのもの

heroku login

Herokuアプリを作る

heroku create

Herokuの環境変数を設定する

heroku config:set DISABLE_COLLECTSTATIC=1

Heroku内でマイグレーションをする

heroku run python manage.py migrate

Herokuでアプリケーションが動いてるかを確認する

heroku open

画面が表示されれば成功

f:id:yoshitaku_jp:20180617141908p:plain

まとめ

  • Djangoをherokuにあげました
  • WEBアプリケーションを公開できました

これから開発頑張っていくぞ

おまけ

Djangoのバージョン確認方法

pythonコマンドで起動させて

>>>import django
>>>django.get_version()
'2.0.6'