やりたいこと
無料枠のサーバーで作ったWebアプリを動かしたい。
サーバーにはherokuを使用する。
Webアプリのフレームワークはdjangoとする。
統合開発環境
Visual Studio2019を使用する。
VisualStudioを起動し、メニューバーから
【ファイル -> 新規作成 -> プロジェクト」】でVisualStudioプロジェクトを作成する。
【 Python -> Web -> Blank Django Web Project 】 でDjangoプロジェクトを作成する
実行ボタンをクリックして、実際に動かしてみます。

ブラウザが起動して以下のように起動が成功していることがわかります。

言語・タイムゾーンの設定
settings.pyの言語と タイムゾーンを日本にします(必須ではありません。)
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'

必要なライブラリ
herokuでdjangoアプリを動かすために必要なライブラリは以下です。
- dj-database-url
- gunicorn
- whitenoise
- psycopg2
- pytz
入っていない場合は、GUI操作で追加します
dj-database-url gunicorn whitenoise psycopg2 pytz


DBインストール
Herokuの管理画面からadd-onを追加します。


settings.pyに上記の設定情報を転記します。
設定ファイルの 編集
赤字のファイルを追加します
__init__.py | モジュールの初期化 |
Procfile | Herokuプロセスの起動コマンド |
requirements.txt | 依存パッケージのリスト |
runtime.txt | Pythonのバージョン指定 |
settings.py | 設定 |
urls.py | URLとWebページを紐付ける |
wsgi.py |
requirements.txtは次のコマンドで作ることができます。
pip freeze > requirements.txt
pipコマンドを実行するPowerShellは以下の画面で開くことができます。一覧を出したいPython環境を選択して、【PowerShellで開く】をクリックします。

Procfile
reqgipのところはプロジェクト名に合わせて変更します。
web: gunicorn reqgip.wsgi --log-file log.txt
heroku ps:scale web=1
runtime.txt
Pythonのバージョンはお使いのPythonのバージョンに変更してください。
python-3.7.3
DB設定
Heroku上ではpostgresqlを使います。
デフォルトのローカルはsqliteです。
そこで使用するDBを切り替える処理を実装します。
基本的にはsettings.pyの設定を使います。
ローカルで変更したいところのみsetings_local.pyに記載して上書きします。
本番環境(heroku)にはsettings_local.pyはプッシュしません。これによって上書きしないので本番環境になります。
ローカル環境 | sqlite3 | settings.pyとsettings_local.pyを使用する |
Heroku | postgresql | settings.pyのみ使用する |
settings.py
# 上の方にあるDEBUG = Trueを書き換える
# 許可するHost情報もHerokuにあわせて書き換える
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', '.herokuapp.com']
・・・
いろいろな設定
・・・
# 最後に以下を追加する
try:
from .settings_local import *
except ImportError:
pass
settings_local.py
基本的には上記のsettings.pyの設定を使います。ローカル環境で書き換えたいところのみsettings_local.pyで上書きします。参考までにsettings_local.pyの全ソースコードを示します。
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
ALLOWED_HOSTS = ['localhost']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
DEBUG = True #ローカルでDebugできるようになります
DB作成
現状ではApplication errorがおこります。これは、Herokuにデプロイしたときにデータベースが新規作成され、それが空であるために起こっています。
manage.pyが存在するフォルダに移動してコマンドを実行します。
appnameはheroku上でのアプリ名を指定してください。
$ cd VisualStudio2019\reqgip
$ heroku run python manage.py migrate -a appname
$ heroku run python manage.py createsuperuser -a appname
上記のコマンドを途中で強制終了するなどした時にはプロセスが残ってしまい、再度の実行ができなくなることがあります。
そこで起動しているプロセスを調べるには以下を実行します。appnameはHerokuアプリ名に置き換えてください。
heroku ps -a appname
以下のnumberをプロセスIDに置き換えて実行することでプロセスを停止できます。
heroku ps:stop number -a appname
まとめ
これでHerokuでDjangoアプリが動くようになりました!
コメント