私自身初めてHerokuでアプリをデプロイした際にこのserver error 500に非常に悩みましたので投稿させていただきます。
まずは基本ですが開発環境(ローカルで)全てのページが正常に動作するか確認してください。
当然遷移先のページがないような場合でもserver error 500と表示されます。
それでも改善しない場合は以下の記述が正確かどうか確認してみてください。
確認するポイントとしては
・データベースの接続
・メールの設定(メール送信をする場合は)
・ALLOWED_HOSTSの設定
・staticの設定
上記の箇所が主なつまずきポイントだと思います。1つずつ正確に記述してください。
今回は1つ目のデータベースの接続について解説していきます。
##<データベースの接続は本当に問題ないですか?>
私のエラーは主にここが原因でした。
postgreSQLでもMySQLでも共通ですがHerokuのデータベースの設定には
dj_database_url
を使用するかと思います。こいつが結構重要なのにあまり詳しい情報が載っていないように思いました。
まずこいつはなにをするためにあるのかというと
Herokuの環境変数に設定してあるDATABASE_URL
からあなたが設定したDBのURLを持ってきてそれを設定の形に反映してくれます。つまり
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にプッシュしないわけにはいきませんからね。
そして記述例ですが
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になります。
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つを正確にすることだと身をもって学ばされました。
頭の悪い私にもできたので皆さんなら楽勝なはずです。最後まで諦めないで頑張ってください。