結論
あくまで原因の1つにはなりますが、使用していたデータベースの試用期間が過ぎたため停止された可能性があります。
実際に起きたエラー
Djangoで作成していたwebアプリをRender.comで起動していました。起動後、しばらくは問題なくアプリを使用できていたのですが、ある日からwebアプリのアカウントにログインするときにcould not translate host name "{db名}" to address: Name or service not known
というエラーが発生し、webアプリが使用できなくなりました。
調査
以下の記事を参考にしました。
Render.comはDBの試用期間があるようです。(現在は90日間)この試用期間を過ぎると有料プランへアップグレードしない限りDBを使用することができないようです。
私の場合
私の場合sqlite3を使用していたと思っていたため、試用期間を過ぎても問題ないと思っていました。
ただ、これがどうやら思い込みだったようで、実際はPostgreSQLでRender.comのDBを使用していたようです。
調査を踏まえての対応
- render.yamlに記述していた「databases」のブロックを削除しました。(以下の赤い部分)
render.yaml
- databases: - - name: django_render_db - region: singapore - plan: free - databaseName: django_render_db - user: django_user services: - type: web name: django_render env: python region: singapore buildCommand: './build.sh' startCommand: 'gunicorn config.wsgi:application' plan: free branch: main healthCheckPath: / envVars: - key: DATABASE_URL fromDatabase: name: django_render_db property: connectionString - key: SECRET_KEY generateValue: true - key: WEB_CONCURRENCY value: 4 autoDeploy: true
- configディレクトリの中にあるsettings.pyのDATABASESの定義を下記のように修正しました。(緑の部分を追加。赤い部分を削除。)
settings.py
... + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } + } - default_dburl = "sqlite:///" + str(BASE_DIR / "db.sqlite3") - DATABASES = { - "default": config("DATABASE_URL", default=default_dburl, cast=dburl), - } ...
これにより、sqlite3でデータベースを保存できるようになり、現在のところ問題なくWebアプリを起動できています。
終わりに
あくまで私のケースに焦点を絞った内容になりました。エラーが発生したときの状況もyaml,settingsファイルも人それぞれです。この記事でcould not translate host name
エラーの全てのケースを解決できるわけではないですが、誰か1人でも役に立つことがあれば嬉しい限りです。
以上です。
参考