DjangoのWEBアプリをHerokuでデプロイする方法

皆様ごきげんよう。構築中のサービスをAWSとHerokuのどちらでデプロイするか悩みましたが、一旦規模が小さいサービスを展開する為、インフラ管理が楽なHerokuを選択してみました。デプロイする為の初期設定と、デプロイ時にエンカウントした問題がいくつかあったのでナレッジを残しておきます。少しでも参考になりましたら幸いです。

前提情報

ー コードはGithubで管理しています。
ー Powershellを使用。
ー Herokuコマンドも利用できるように、Heroku CLIをインストール済。

CollectStatic問題

Staticファイルを一か所にまとめるプロセスがHeroku側で走るのですが、一か所にまとめられないとエラーがでる場合があります。この場合は対応方法を検討する必要がありますが、一旦この処理自体を実行しないように設定する事も可能です。その際はコマンドプロンプト経由で以下コマンドを実行。

heroku config:set DISABLE_COLLECTSTATIC=1

※設定を戻す際には1を0に設定すればOK

Tkinterモジュールが見つからない問題

そもそもTkinterモジュールを自分の意志で設定していなかったのですが、プロジェクト全体のmodule.pyファイルを確認した所、一番最初の行にDjango側の初期設定の関係で記載されている事が確認できました。TkinterモジュールはPythonでGUIを取り扱うのに必要なモジュールで、Herokuでは取り扱っていないモジュールでした。今回のプロジェクトではGUIを利用していないので、この行はコメントアウトしておきました。※結構ネットではまっている方が多いのでHeroku側で対応できるようにした方が良いかもです

from tkinter import CASCADE #コメントアウトする所

ローカルのMysqlに設定されているSocketで接続できません問題

django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")

ローカルPCで動作確認をする際には問題なく動作しましたが、デプロイする際にそもそもMysqlをHeroku側で準備しておかないとエラーが出てしまいます。その為、アプリケーション側とHeroku側で事前にDBの対応が必要です。

まずはHeroku側で、JawsDB MysqlをAdd-Onsマーケット経由でインストールします。2025年8月時点では無料プランがあったので、そちらを利用してみました。

Powershellで、コマンド「 heroku config」と実行するとDBのURLも含まれた情報が取得できるのでそこで接続URLを確認します。接続URLはDjango側でDB設定しているところのURLの値として記入(プロジェクト全体の設定が記載されているsettings.py、もしくは.envファイル)。

ちゃんとJawsDB側で、ユーザー設定を行っておきましょう。

JAWS DB側にmigrateする

ローカルPC側にあるDB設定をHerokuのJawsDBにも反映させる必要があります。その為、以下コマンドでデータを反映させました。これでアプリケーションがHerokuにデプロイされた後に、DB管理画面などDjangoアプリ側で作ったログイン機能が問題なく使えるようになりました。※Powershellで実行。前の設定でDB接続先をJawsDBにしている為、変更がJawsDB側に反映されます。

> python manage.py makemigrations
> python manage.py migrate
> python manage.py createsuperuser

ビルド完了したのにアプリが起動していない

上記の問題をクリアしてビルドも成功しましたが、URLを開くとアプリケーションエラーが表示されました。理由はWEBサーバー自体が起動していない事が原因との事。

heroku logs –tailで確認した所、理由はWEBサーバー自体が起動していない事が原因との事。

その為、Powershell経由で以下コマンドでサーバーを起動させました。

heroku ps:scale web=1

再度HerokuのマイページでDeployを試みましたが、別のエラーが発生。またheroku logs –tailで確認した所、「django_website」のモジュールが無いと文句言われていました。

Djangoプロジェクト側にあるprocfileにdjango_websiteが記載されていましたので、以下のようにProcfileを修正。※プロジェクト名には、wsgiファイルがある場所のフォルダ名を設定する。

web: gunicorn プロジェクト名.wsgi --log-file -

上記のエラーを潰して、ようやくHerokuにサービス公開する事ができました。

Comments are closed

Latest Comments

No comments to show.