前回までのあらすじ
Djangoで作成したアプリをHerokuにデプロイするための準備を行い、whitenoiseを使って静的ファイルの処理を行えるようにしました。
目次
データベースの設定
Heroku Postgresの追加
HerokuではPostgreSQLを公式でサポートしていて、使うにはHeroku Postgresというアドオンが必要です。
ただし、このアドオンは無料で利用することができません。
最低でも月額$5〜の利用料金が発生します(2024年10月時点)。
利用にあたってのプランと料金はこちらからご確認ください。
では、ターミナルから次のコマンドを入力して、Heroku Postgresを追加します。
$ heroku addons:create heroku-postgresql:essential-0
アドオンが正常に追加されているか確認するために、次のコマンドを入力します。
$ heroku addons
Heroku Postgresが追加されていることを確認します。
ところで、こちらの記事の中で環境変数のDATABASE_URL
の設定を後回しにしていました。
こちらの環境変数は、Heroku Postgresを追加した時点で自動的に設定されます。
では、次のコマンドを入力して環境変数の一覧を確認しましょう。
$ heroku config
出力された環境変数の中にDATABASE_URL
が確認できたら、次のステップに進みましょう。
Procfileに設定を追記
モデルの変更があった場合は、ローカルでmakemigrations
コマンドを実行することでマイグレーションファイルが作成され、gitによるバージョン管理の対象となっています。
しかし、$ git push heroku main
コマンドを実行してデプロイしてもmigrate
コマンドは自動で実行されません。
これでは、ちょっと不便なので解決しましょう。
デプロイ時にmigrate
コマンドを自動で実行するためには、Procfile
に次の内容を追記する必要があります。
release: ./manage.py migrate --no-input
このコマンドは、Herokuにデプロイした際のreleaseフェーズでmigrate
を自動的に実行してくれるものです。
--no-input
オプションは、コマンド実行時にユーザーの入力を求めずに処理を進めるための設定です。
この設定によって、デプロイのコマンドを実行するだけで自動でマイグレーションが行われることになりますので忘れずに設定しましょう。
参考:
Heroku スターターガイド (Python) | Heroku Dev Center
psql
psqlは、PostgreSQLをターミナルから操作するためのツールで、データの確認や管理を行う上で必要不可欠なものです。
ローカル環境のみならず、本番環境のPostgreSQLデータベースにも簡単に接続できます。
Dockerコンテナで使う(ローカル環境)
今回のようにDockerを使って開発を行っている場合は、インストールは不要です。次の手順でpsql
を実行します。
次のコマンドを入力してコンテナのリストからPostgreSQLのコンテナ名を調べます。
$ docker ps
出力結果でIMAGES
列がpostgresの行にあるNAME
列がコンテナ名です。
docker-compose.yml
ファイルでPOSTGRES_USER
とPOSTGRES_DB
の値を確認します。
では、確認したところで、次のコマンドを入力してpsqlを実行します。
$ docker exec -it <コンテナ名> psql -U <POSTGRES_USERの値> -d <POSTGRES_DBの値>
以下に入力例を示します。
""" 例 コンテナ名: my_project-db-1 POSTGRES_USER: postgres POSTGRES_DB: django_develop """ $ docker exec -it my_project-db-1 psql -U postgres -d django_develop
コマンドを実行するとローカル環境のPostgreSQLデータベースに接続されます。
しかしながら今回は、Dockerを使った開発環境にHeroku CLIを組み込んでいないため、このままでは本番環境のPostgreSQLデータベースに接続することができません。
本番環境のPostgreSQLデータベースに接続するためには、ローカルマシンでpsqlが実行できるようにする必要があります。
ローカルマシン上で使う(本番環境)
ローカルマシンでPostgreSQLのクライアントツールであるpsqlを実行するためには、libpqをインストールする必要があります。
Homebrewを使ったインストールは以下の手順で行います。
# Homebrewを最新にする $ brew update # libpqのインストール $ brew install libpq # シンボリックリンクの作成 $ brew link --force libpq
注意:シンボリックリンクを作成しないとパスが通らず、正常に動作しないのでご注意ください。
では、本番環境(Heroku)のPostgreSQLデータベースに接続します。
$ heroku pg:psql
PostgreSQLを操作するコマンドは、こちらの記事が参考になります。
qiita.com
本番環境の動作確認
設定が完了したので、本番環境にデプロイしましょう!
ただし、この状態ではローカル環境で作成したデータは反映されていないので、本番用のデータを作成します。
そのためには、次のコマンドを入力してスーパーユーザーを作成します。
$ heroku python manage.py createsuperuser
このあとの操作はチュートリアルと同じ操作になりますので割愛しますが、本番用のデータを登録して表示されるか確認して終了となります。
おつかれさまでした!
データは無事に本番環境へ反映されたでしょうか?
今回を含めて4回にわたってHerokuの設定について取り上げてきましたが、次回いよいよ最終回となります。
最終回は画像アップロードについて解説しますので、お楽しみに
では、また次の記事で!✋️