🙅

Herokuの500エラーへの対応(Django)

2021/09/12に公開

Djangoで作成したアプリを2つHerokuにデプロイしたところ、
それぞれ500エラーが発生してしまったので、
その対応方法とエラーの内容について忘備録として残しておきます。

対応方法

結論から申し上げますと次のURLの通りの対応を行い、
Heroku上でもローカルと同じ方法でエラーの内容を確認できるようにしました。

具体的にはviews.pyとurls.pyに次の内容を加えます。

views.py

from django.views.decorators.csrf import requires_csrf_token
from django.http import HttpResponseServerError

@requires_csrf_token
def my_customized_server_error(request, template_name='500.html'):
    import sys
    from django.views import debug
    error_html = debug.technical_500_response(request, *sys.exc_info()).content
    return HttpResponseServerError(error_html)
urls.py
from [アプリ名] import views

handler500 = views.my_customized_server_error

このようにすると下の画像のようにエラー内容が表示されます。

image.png

エラー内容

1つ目のアプリ

上の画像のエラーが発生したアプリになります。
データベース関係のエラーでした。

herokuのデータベース設定を行った際に

heroku run python manage.py makemigrations 
heroku run python manage.py migrate

としていましたが、これだけではアプリ内に記述したmodels.pyの内容が何故か反映されていなかったため、

heroku run python manage.py makemigrations [アプリ名]
heroku run python manage.py migrate

としたところ、データベースの設定を無事に完了することができました。

2つ目のアプリ

1枚目と同じくデータベース関係のエラーでした。

500エラーの中身を検証したところ、
登録フォームからデータベースへの登録を行うと、
models.pyに記述した覚えのない列についてnull制約が発生し
登録できないエラーが発生していました。

heroku pg:reset DATABASE_URL

と打ち込み、データベースの内容を全てリセットし、
再度設定したところ、無事に登録できました。

Discussion