herokuにDjangoをアップロードする流れ
記録用です。
djangogirlsをもとに作っています。
URL: https://djangogirlsjapan.gitbooks.io/workshop_tutorialjp/
*Herokuアカウント作成済み
*仮想環境作成済み
*djangoプロジェクト作成済み
Windows10です
必要なファイルのインストール
djangogirlsの「デプロイ!」のところだけを見ると、psycopg2をインストールするタイミングがなかったので、ここでインストール。
(ほかの章でインストールしてるのかな?)
$ pip install dj-database-url gunicorn whitenoise psycopg2
requirements.txtの作成
$ pip freeze > requirements.txt
で、requirements.txtファイルを作成します。heroku上でインストールするソフトウェアの認識させています。
ちなみに中身は
dj-database-url==0.5.0
Django==2.0.6
gunicorn==19.8.1
psycopg2==2.7.5
pytz==2018.4
whitenoise==3.3.1
になってます。アプリで使うソフトウェアが増えたときは、ローカルでインストールしたあと、もう一度
$ pip freeze > requirements.txt
を行うことで、requirements.txtの中身が書き換わり、git pushすると自動的にソフトがHeroku上にインストールされます。
Procfileの作成
requirements.txtと同じディレクトリに、Procfileという名前のファイルを作成し、中身を
web: gunicorn mysite.wsgi
「mysite」のところは自分のプロジェクト名にします。
アプリを動かすファイル?を指定しているみたいです。
runtime.txtの作成
Procfileのディレクトリと同じところに、runtime.txtファイルを作成し、中身を
python-3.6.5
とします。このPythonのバージョンは、自分が使っているPythonのバージョンを記載しますが、Pythonが最新のバージョンじゃないとherokuはサポートしていないという記述がコンソール上で出たことがあるので、最新版にアップデートしておくことが好ましいかと思います。
local_settings.pyの追加
プロジェクトディレクトリ下(デフォルトのsettings.pyと同じところ)に、local_settings.pyを作成し、中身に
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
DEBUG = True
と記述します。これは、herokuとローカルで使うデータベースが違うため、ローカルでの設定を保存しておくためみたいです。
settings.pyに追記
settings.pyの最終行に、
import dj_database_url
DATABASES['default'] = dj_database_url.config()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
ALLOWED_HOSTS = ['*']
STATIC_ROOT = 'staticfiles'
DEBUG = False
try:
from .local_settings import *
except ImportError:
pass
を追加します。これは、herokuやローカル上での動作に必要な設定みたいです。
wsgi.pyに追加
from whitenoise.django import DjangoWhiteNoise
application = DjangoWhiteNoise(application)
をwsgi.pyの最終行に追加します。意味は分かりません。わかる方いたら教えてください。
herokuにログインします
heroku login
でコンソール上で、herokuにログインします。emailとpasswordの入力を求められるかと思います。
.gitignoreを作成します
これで、ファイルの作成は最後です。gitがlocal_settings.py等をアップロードしないように、指定します。「.gitignore」というファイルを作成し、中に
myenv
__pycache__
staticfiles
local_settings.py
db.sqlite3
*.py[co]
と記述します。myenvとは、その時使っている仮想環境名です。(タイプミスでmyvenvと打ててなかったので、djangogirlsから修正しています)
コンソールでgitを使いアップデート
gitのコミットまで行います。
ここは、通常のgitの使い方と違いはありません。
$ git init
$ git config user.name "Your Name"
$ git config user.email you@example.com
$ git add -A .
$ git commit -m "My app"
heroku上にアプリケーションを作成します。
heroku create appname
「appname」は自分の好きなアプリの名前を入力してください。他のアプリとかぶっている名前や、アンダーバーを含んだ名前は使えません。アプリの名前はいつでも
$ heroku apps:rename the-new-name
で変更できます。
$ git push heroku master
$ heroku ps:scale web=1
で、ソースコードをherokuにpushします。
下のコードで、herokuのwebプロセスを起動しているみたいです。web=1は起動するwebプロセスの数を指定していて、多いほどパワーが上がるみたいですが、無料では1つしか使えないそうです。
$ heroku open
で自分のアプリを開けます。
$ heroku run python manage.py migrate
$ heroku run python manage.py createsuperuser
を行うことで、heroku上のデータベースが作成され、管理者ページ(/admin)にアクセスできるようになります。
所感
最初のpsycopg2以外特につまるところはありませんでした。Djangoの中身を書き込んでまた詰まったりしたら、記録を残そうと思います。