LoginSignup
2
4

More than 5 years have passed since last update.

【記録用】Djangoアプリのherokuでのアップロード

Last updated at Posted at 2018-06-24

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の中身を書き込んでまた詰まったりしたら、記録を残そうと思います。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4