はじめに
こちらの記事はDjangoで作成したものをHerokuにてデプロイする際にエラーにとてもつまずいたので、また見返す用に作成しました。誰かのためになれば嬉しいです。
目次
push前のエラー
「error: failed to push some refs to」について
Herokuで「git push heroku main」を実行する際に、以下のようなエラーが出ることがあります。
To https://git.heroku.com/<アプリ名>.git
![remote rejected]main -> main (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/<アプリ名>.git'
上記のエラーは、To から始まるログの前に複数行のログが表示されているのですが、その中にAbortingなど、エラーを示唆する文言があるエラー行があるのでそこを見ることで解決につながりました。
例えば、
Requested runtime (python-3.8.1) is not available for this stack ~.
のようなHerokuに対応していないPythonのバージョンを「runtime.txt」で指定する。
あるいは
remote: ! Error while running '$ python manage.py collectstatic --noinput'.
というエラーもありました。
こちらのエラーは、「push」する前に、
heroku config:set DISABLE_COLLECTSTATIC=1
というふうにすることでエラーを解決できました。push後は、
heroku config:set DISABLE_COLLECTSTATIC=0
という様に戻すことを忘れないでください。
push後のエラー
デプロイした後にもいくつかのエラーが出ました。
1つ目は、
「Internal Server Error」です。
これについての1つ目の原因は、「settings.py」において、
DEBUG=False
を入れ忘れていたことです。凡ミスですね。
2つ目の原因は、
「Procifile」にありました。
「Procifile」は、BASE_DIRにありますが、このファイルを作成する際に「wsgi.py」のディレクトリ指定が間違っていたいことが原因でした。
このファイルのルールとしては、
web: gunicorn (あなたのプロジェクトのwsgi.pyがあるディレクトリの名前).wsgi
と書く必要があります。つまり、wsgi.pyがprojectディレクトリに入ってる場合は、以下の様に書きます。
web: gunicorn project.wsgi
2つ目のエラーはデータベースについてのエラーです。1つ目のエラーを解消し後で次の様なエラーが出てきました。
django.db.utils.OperationalError: no such table:
あれ、テーブルあるはずなのになとおもいましたが、調べていくとこれは、.gitignoreファイルでデータベースを無視する様に書いていたからでした。なので、.gitignoreから「db.sqlite3」を削除すれば解決しました。