使用Buddy测试Django REST FRAMEWORK+PostgreSQL项目连接报错如何解决
问题根因
你当前的报错核心原因是Django配置中数据库的HOST参数为空:
- 本地开发时PostgreSQL运行在本地,空
HOST默认走Unix域套接字连接,所以可以正常运行 - Buddy中PostgreSQL是独立的服务容器,和你的代码执行容器不在同一个实例内,空
HOST会默认尝试连接执行容器本地的PostgreSQL,自然找不到对应服务
修复方案
方案1:适配多环境的最优方案(推荐)
修改settings.py的数据库配置,从环境变量读取HOST参数,兼顾本地开发和CI环境:
# Database # https://docs.djangoproject.com/en/3.2/ref/settings/#databases import os DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': os.getenv('DB_NAME', 'DBname'), 'USER': os.getenv('DB_USER', 'DBuser'), 'PASSWORD': os.getenv('DB_PASSWORD', 'DBpassword'), 'HOST': os.getenv('DB_HOST', ''), # 本地默认空,CI环境传入对应服务主机名 'PORT': os.getenv('DB_PORT', '5432'), } }
之后在Buddy的流水线变量配置中添加如下环境变量即可:
DB_HOST:postgres
如果不想单独配置变量,也可以直接在执行命令里临时注入:
pip install -r requirements.txt cd Project DB_HOST=postgres python manage.py test
方案2:临时快速验证方案
如果只需要先验证CI流程可以跑通,直接把settings.py里的HOST值改为你的PostgreSQL服务主机名postgres即可:
'HOST': 'postgres',
额外排查点
如果修改后仍有报错,可以确认两点:
- 你配置的PostgreSQL服务已经关联到当前执行任务的流水线,没有被绑定到其他流水线
- PostgreSQL服务的配置参数(库名、用户名、密码、端口)和Django配置完全一致
内容的提问来源于stack exchange,提问作者juan Mendez
相关产品推荐
相关产品推荐

