LoginSignup
7
5

More than 5 years have passed since last update.

HerokuにDjangoのプロジェクトをデプロイした時のエラーのメモ

Last updated at Posted at 2018-11-24

@okoppe8 さんの「[Django] Heroku デプロイ方法 2018年版」を元に、HerokuにDjangoのプロジェクトをデプロイしました。
自分の理解も兼ねて、コピぺでなく手打ちで写経したのですが、エラーが出て困ったので備忘録です。
原因は私の打ち間違いですが、エラーメッセージをググっても一発で解決策が見つからなかったので、同じ状況になりそうな未来の自分向けに書きました。

バージョンの確認

$ heroku run python --version
Python 3.6.6
$ heroku run python -c "import django; print(django.get_version())"
2.1.3

runtime.txtrequirements.txt で指定したバージョンになっていることを確認します。

heroku run python manage.py createsuperuser でエラー

$ heroku run python manage.py createsuperuser
django.db.utils.OperationalError: no such table: auth_user

ローカル開発環境とHeroku環境でDBの接続方法を変え、「DEBUG=False」で切り替えていましたが、Heroku環境で「DEBUG=True」に変えるのを忘れていました。

マイグレーションが行われているか確認

$ heroku run python manage.py showmigrations でマイグレーションが行われているか確認します。

admin
 [X] 0001_initial

のように、「[X]」ならOK。
[ ]」ならマイグレーションが行われていないので、DBの設定を確認します。
(あるいは、プロジェクト名/settings.pyの「DEBUG=False」がTrueのままになっていないか確認します)

createsuperuserが正しく動いた場合

正しく動くと、以下のようにユーザ名やパスワードを対話形式で設定できます。

$ heroku run python manage.py createsuperuser
Username (leave blank to use 'abcde12345'): 
Email address: 
Password: 
Password (again): 
Superuser created successfully.

python manage.py runserver で開発用サーバを起動しようとした時に、SyntaxError エラーが出る

$ python manage.py runserver
  File "manage.py", line 14
    ) from exc
         ^
SyntaxError: invalid syntax

pythonのバージョンが2系だった場合に出ます。Django2系では、Python3系を使う必要があります。
ローカル環境でフォルダごとに異なるpythonバージョンが入っていたり、dockerに異なるpythonバージョンが入っている場合などで発生します。
python --version でバージョンを確認します。

WEBサーバ(gunicorn)が起動しない

heroku[web.1]: State changed from crashed to starting
heroku[web.1]: Starting process with command `unicorn manager_project.sgi --log-file -`
heroku[web.1]: State changed from starting to crashed
heroku[web.1]: Process exited with status 127
app[web.1]: bash: unicorn: command not found

Starting process with command ...」の行に注目し、Procfileに書いたコマンドが間違えていないか確認します。
(上記では、gunicornをunicornと間違えていて、.wsgiを.sgiと間違えている)

ローカル環境では動くのに、Herokuではmoduleが見つからない

ログに503エラーが出る場合は、git pushしたタイミングでのログを見ます。

app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/util.py", line 350, in import_app
app[web.1]: __import__(module)
app[web.1]: ModuleNotFoundError: No module named 'manager_project.sgi'

上記の場合は、ファイルの拡張子を「.wsgi」とすべきを「.sgi」としているので、ファイルが見つからずエラーになっています。

テストデータ作成のためにPythonシェルでモデルをimportする時にエラー

モデルを定義して、テストデータ作成のためにPythonシェルから
$ heroku run python manage.py shell
>>> from manager.models import Person, Manager, Worker
と、モデルをimportした時に、

RuntimeError: Model class manager.models.Person doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

と出た時は、プロジェクト名/settings.py の INSTALLED_APPS に書いたアプリ名が正しいか、確認します。

ビューとテンプレートを作成して、開発用WEBサーバを起動したら、エラー

  File "/code/manager_project/urls.py", line 21, in <module>
    path('worker_list/', manager_view.WorkerListView.as_view())
NameError: name 'manager_view' is not defined

urls.pyで「import manager.views as manager_view」のようにインポートするべきを、忘れていました。

heroku log で出るDjangoのログをDEBUGレベルに変更する

ログに表示される情報が不足している場合は、heroku config:set DJANGO_LOG_LEVEL=DEBUG でDEBUGレベルのログを取得します。
(あまり内容に変わりが無い気もしますが。。。)

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