##エラーリスト(※随時更新していきます)
###①django.template.library.InvalidTemplateLibrary: Invalid template library specified. ImportError raised when trying to load 'rest_framework.templatetags.rest_framework': No module named 'pytz'
####◆発生タイミング
python manage.py makemigrations実行時に発生。
####◆原因
models.pyに下記フィールドを設定。
created_at = models.DateTimeField(verbose_name='登録日時', auto_now_add=True)
DateTimeFieldを使用するにはサードパーティ製ライブラリのpytzを使用する必要がある。
このとき初めて仮想環境を駆使して開発していたため、ライブラリをインポートしていなかったのが原因。
####◆解決方法
pytzを仮想環境にインポート。
これで無事makemigrationsが通りました。
pip install pytz
####◆参考サイト
###②django.db.utils.OperationalError: could not translate host name "host" to address: Unknown host
####◆発生タイミング
python manage.py runserver実行時に発生。
####◆原因
開発用サーバーを立ち上げようとしたら、本番用のDB設定を参照しちゃったという事象でした。
下のコードは本番用のDB設定です。
#herokuデプロイ用のDB設定
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'name',
'USER': 'user',
'PASSWORD': '',
'HOST': 'host',
'PORT': '',
}
}
エラー内容はつまり、「hostなんて知らねえよ」ということですね。
####◆解決方法
元々は開発環境用のDB設定(sqlite)が施されていたのですが、herokuデプロイ時にsettings.pyからは外してあります。
なので、ここでは開発環境用のDBを設定させる必要があります。
しかしsettings.pyは本番環境用に設定されているので、今回はsettings.pyと同階層のフォルダ内に__local_settings.py__を作成し、そこに開発環境用のDB設定を書いていきます。
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR + 'db.sqlite3',
}
}
DEBUG = True
もちろんデバッグ設定もTrueにします。
そしてsettings.pyからlocal_settings.pyを読み込めるよう設定します。
try:
from .local_settings import *
except ImportError:
pass
if not DEBUG:
SECRET_KEY = os.environ['SECRET_KEY']
import django_heroku
django_heroku.settings(locals())
tryでlocal_settings.pyの全てを読み込もうとしています。
local_settings.pyはgitの追跡対象外としていますので、もし本場環境で読み込もうとしてもインポートエラーが発生します。
しかし特に何をするわけでもなく、passでスルーさせます。
そして開発環境じゃない場合、本番環境用のDB設定を参照する仕組みとしています。
local_settings.pyは忘れないよう、ちゃんと.gitignoreに追加しましょう。
これで問題なく開発用サーバーは立ちあがり、本番ではちゃんとheroku用のDB設定を参照していました。
####◆参考サイト
###③また新しいエラーが出たら追加します