LoginSignup
1
1

More than 1 year has passed since last update.

初心者がDjangoでHerokuにデプロイした際のserver error 500解決策 DB編

Posted at

私自身初めてHerokuでアプリをデプロイした際にこのserver error 500に非常に悩みましたので投稿させていただきます。

まずは基本ですが開発環境(ローカルで)全てのページが正常に動作するか確認してください。
当然遷移先のページがないような場合でもserver error 500と表示されます。

それでも改善しない場合は以下の記述が正確かどうか確認してみてください。

確認するポイントとしては
・データベースの接続
・メールの設定(メール送信をする場合は)
・ALLOWED_HOSTSの設定
・staticの設定

上記の箇所が主なつまずきポイントだと思います。1つずつ正確に記述してください。

今回は1つ目のデータベースの接続について解説していきます。

<データベースの接続は本当に問題ないですか?>

私のエラーは主にここが原因でした。
postgreSQLでもMySQLでも共通ですがHerokuのデータベースの設定には
dj_database_url
を使用するかと思います。こいつが結構重要なのにあまり詳しい情報が載っていないように思いました。
まずこいつはなにをするためにあるのかというと
Herokuの環境変数に設定してあるDATABASE_URLからあなたが設定したDBのURLを持ってきてそれを設定の形に反映してくれます。つまり

settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
        'OPTIONS': '',
    }
}

これを書いているのと同義ということです。

余談ですが
DATABASE_URLの確認方法は

$ heroku config

使用するデータベースを変更する場合には

$ heroku config:set DATABASE_URL='データベースのURL'

ちなみになんでわざわざ環境変数に入れるの?っと私は馬鹿なので思いました。
これはデータベースの情報を外に漏らさないためですね!settings.pyをgitにプッシュしないわけにはいきませんからね。

そして記述例ですが

settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
        'OPTIONS': {'sql_mode': 'STRICT_TRANS_TABLES',}
    }
}
db_from_env = dj_database_url.config()#ここのカッコの中身はOPTIONSにあたります
DATABASES['default'].update(db_from_env)

これはあくまで私の記述方法になりますが、上で設定した項目DATABASES['default']
に対して
DATABASE_URLの情報を持ってきて上書きしている状態になります。
ちなみによくサイトに落ちている以下の記述をそのままコピペするとserver errorになります。

settings.py
import dj_database_url

DATABASES['default'] = dj_database_url.config(conn_max_age=600, ssl_require=True)

このコードはOPTIONSにあたるカッコ内にも問題があります。
conn_max_age=600というのは60秒までしかデータベースに接続しないよ!という意味です。
(私はこれでserver error 500が出ていました。なぜか時間をおくと切断される!!となっていました。)
なのでconn_max_ageを任意の数値に設定してください。記述なし、またはCONN_MAX_AGEなら切断はされません。
ssl_requireも場合によってはFalseにする必要があるかと思います。

データベースの設定は確実に行ってください。
デプロイで一番大切なのは根気ではなく1つ1つを正確にすることだと身をもって学ばされました。
頭の悪い私にもできたので皆さんなら楽勝なはずです。最後まで諦めないで頑張ってください。

1
1
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
1
1