Django学習メモ⑦

DjangoのHerokuデプロイでハマったところ

  • 500エラが出たので、一時的にsettings.pyのDEBUG設定をTrueにする。

django.db.utils.OperationalError: no such table: hoge

となっていたので、migrateがうまく行っていない可能性。

  • sqlite3の仕様が原因

全く仕組みを知らず、MySQLやPostgreと同じようなものと思っていたが、 SQLiteは、サーバー型ではなく、データをファイル形式で保存するとのこと。 Heroku dynoのファイルシステムは永続的ではなく、dyno間の共有もないため、 migrateを実行すると、Herokuは新しいdynoを起動し、移行を実行してからdynoとデータベースを削除してしまうらしい。

  • 解消方法

db.sqlite3(データファイル)をgit管理していなかったため、リモートリポジトリにpushされていなかった。 そこで.gitignoreを編集する。

<blog>

__pycache__

staticfiles

local_settings.py

db.sqlite3

*.py[co]

settings.json

からdb.sqlite3を削除

<blog>

__pycache__

staticfiles

local_settings.py

*.py[co]

settings.json

無事うまく動作した。

【補足1】sqliteのメリット・デメリット

メリット
クラウドサーバーを用いるとき、他者とDBサーバーを食い合わないため、高速
データ型の概念がない
デメリット
パスワード設定がない
頻繁に不特定多数がデータベースに書き込むような処理は苦手

#【補足2】Heroku Dynoとは

codezine.jp

  • 参考にしたstack Overflow

stackoverflow.com