アプリなどを開発するブログ

React Native / Swift / Ruby on Railsなどの学習メモ。


ローカルのDjangoアプリケーションをHerokuにデプロイする手順

基本はHeroku公式 Getting Started with Django on Heroku を見ながらやればいいのですが、
過去にHerokuにデプロイした事があってHeroku用の環境は整ってるんだけど、
別のアプリを作ってデプロイしたい時に毎度「あれ、、どっからやればいいんだっけ、、、?」ってなるので自分用メモです。

ローカルで開発が完了し、
ターミナルでローカルのProjectディレクトリにいる状態として進めていきます。

requirements.txt にライブラリを書き出す

pip freeze > requirements.txt

してHerokuに用意して欲しいライブラリをrequirements.txt に書き出し。

DBの設定

dj_database_url ( 一度デプロイした事があるならローカルにあるはず ) を使って
HerokuのDBに対応させます。
難しい事はherokuがやってくれるので、ドキュメントに書いてある通りにやってみましょー!

import dj_database_url
DATABASES['default'] =  dj_database_url.config()

と、ここでポイントですが、こうやっちゃうとローカルで再度開発する時に
いちいちここを変更せねばなりません。
なので、僕はこうやってます。

import os
import dj_database_url

DATABASES = {'default': dj_database_url.config(default='postgres://localhost')}
if bool(os.environ.get('LOCAL_DEV', False)):
    # ローカル開発なら DATABASES['default'] を上書き
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3', 
            'NAME': 'データベース名.sqlite3',
            'USER': '',                      
            'PASSWORD': '',             
            'HOST': '',                     
            'PORT': '',                     
        }
    }

とやれば、ローカルならローカルのDB(sqlite3)、heroku上ならheroku上のpostegreSQLを使うようにできました。

Procfile ファイルをつくる

herokuに、走らせるプロセスを教えるためのファイルです。
「Procfile」というファイル名のテキストファイルを作成し、その中に

web: python manage.py runserver 0.0.0.0:$PORT --noreload

って書いて保存します。

.gitignore ファイルを作る

git でファイルをcommitする時に含めないで欲しいファイルを定義します。
「.gitignore」ってテキストファイルを作って、その中に

venv
*.pyc

って書いて保存します。

git で commit する

git init
git add .
git commit -m "my django app"

heroku上にアプリを作成

heroku create アプリ名

アプリ名は省略できます。
が、ランダムな文字列になると管理しづらいので、僕は毎回指定してます。

デプロイ

git push heroku master

データベースとDjangoをシンクさせる

heroku run python manage.py syncdb

これで動くようになったはずです。

heroku open

で、ブラウザが立ち上がってDjangoアプリが開かれます。

ちなみに

heroku logs

で(制限有りですが)ログが見れるので、うまくいかない場合はこちらを参照してみて下さい。