You need to enable JavaScript to run this app. 在GitLab上对Django应用执行测试时数据库连接问题求助
优惠活动
大模型
产品
解决方案
定价
更多

在GitLab上对Django应用执行测试时数据库连接问题求助

GitLab 环境 Django 应用数据库连接故障排查方案

通用排查步骤

  • 首先校验 .gitlab-ci.yml 中的服务声明配置,数据库服务的别名必须和Django配置中的HOST字段完全匹配,参考Postgres服务配置示例:
services:
  - name: postgres:14-alpine
    alias: postgres
variables:
  POSTGRES_DB: test_db
  POSTGRES_USER: test_user
  POSTGRES_PASSWORD: test_pass

GitLab CI 内部通过服务别名做域名解析,禁止填写localhost、127.0.0.1作为数据库主机地址,否则无法完成连通

  • 检查Django测试环境的数据库配置,优先从CI环境变量读取连接参数,避免硬编码导致的配置不一致,参考配置:
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": os.environ.get("POSTGRES_DB"),
        "USER": os.environ.get("POSTGRES_USER"),
        "PASSWORD": os.environ.get("POSTGRES_PASSWORD"),
        "HOST": os.environ.get("DB_HOST", "postgres"),
        "PORT": os.environ.get("DB_PORT", "5432"),
    }
}

如果使用MySQL,将ENGINE字段改为django.db.backends.mysql,同时确认依赖包mysqlclient已添加到requirements.txt中。

  • 增加数据库启动等待逻辑,数据库服务初始化通常需要5-15秒,测试脚本执行前添加等待逻辑避免连接超时:
test_job:
  script:
    - sleep 10
    - python manage.py test

可以根据使用的数据库镜像版本调整等待时长,避免数据库未完成初始化就启动测试

  • 确认CI网络没有端口限制,Postgres默认端口5432、MySQL默认端口3306需要在GitLab Runner的内部网络中放开,禁止安全组、防火墙规则拦截对应端口的访问请求。

MySQL 场景特殊配置

如果使用MySQL作为测试数据库,需要在CI变量中添加如下配置,规避默认SSL连接导致的报错:

variables:
  MYSQL_CLIENT_FLAGS: --ssl-mode=DISABLED

内容的提问来源于stack exchange,提问作者Joel Kouassi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 06:15:03