Django Girls TutorialでHerokuへのデプロイをやったときのこと。
heroku run python manage.py migrate
は成功するのですが、
heroku run python manage.py createsuperuserがエラーになりました。
auth_nameが無いといわれます。no such tableだそうです。このようなエラーが出ます。
You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, blog, contenttypes, sessions. Run 'python manage.py migrate' to apply them. Traceback (most recent call last): File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute return self.cursor.execute(sql, params) File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 328, in execute return Database.Cursor.execute(self, query, params) sqlite3.OperationalError: no such table: auth_user
原因は、.gitignoreのlocal_settings.pyをsetingとミススペルしていたことでした。
Django Girls Tutorialでは、local_settings.pyがあればローカルのSqlite3を使い、herokuにはこのファイルをpushしないことでPostgreSQLを使うことにしています。
ところが、.gitignoreで指定できなかったため、herokuの方にlocal_settings.pyが転送されて、データベースとしてSqlite3が使われることになってしまいました。migrate時にエラーにならないのですが、データベースファイルができないらしく、tableがないというエラーになっていました。
リモートのファイルのみを消すには、
git rm --cached mysite/local_settings.py
git commit -m "Deleted remote local_settings.py."
git push heroku master
で消すことができました。
デプロイするだけでもいろいろトラブルになるんですね。