在Render.com上启动的Django web应用程序中,“无法将主机名“{db名}”转换为地址:名称或服务未知”发生了错误
结论
尽管可能性之一是因为试用期已过而停止使用的数据库。
发生的错误实际上
我以前用Django制作的Web应用在Render.com上启动过。一开始,我能够顺利地使用应用程序,但有一天当我尝试登录到Web应用程序的帐户时,出现了一个错误:”无法将主机名”{db名}”转换为地址:无法识别的名称或服务”,导致无法使用Web应用程序。
调查
我参考了以下文章。
Render.com似乎有一个数据库的试用期(当前为90天)。一旦超过试用期,如果不升级为付费计划,似乎将无法使用该数据库。
对于我而言
我之前以为自己使用的是SQLite3,所以认为即使试用期过后也没问题。但事实似乎是我误解了,实际上是在Render.com上使用PostgreSQL数据库。
在调查的基础上采取相应措施
-
- 在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”错误的情况,但只要能对一个人有帮助,我就感到非常高兴。
就是这样。
请引用以下内容(只需要一个选项)