ローカルの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
で(制限有りですが)ログが見れるので、うまくいかない場合はこちらを参照してみて下さい。