从Travis CI迁移到GitHub Actions后Nosetests无法通过PostgreSQL认证
问题根因
你遇到的认证失败核心问题是创建awips数据库角色时未设置登录密码,官方PostgreSQL镜像默认启用密码认证,无密码的角色无法通过密码验证流程登录。此外你的Workflow配置还存在小的语法瑕疵。
修复步骤
- 修正创建
awips角色的SQL语句,指定与测试环境变量匹配的密码:
把原有创建角色的命令
psql -c 'create role awips superuser createdb createrole inherit login;' -h localhost -U postgres postgres
替换为
psql -c "create role awips superuser createdb createrole inherit login password 'awips';" -h localhost -U postgres postgres
- 修正Workflow语法错误:你现有配置中
- name create metadata database and awips role缺少冒号,需改为- name: create metadata database and awips role避免潜在解析问题。
可选优化
可以直接通过PostgreSQL服务的环境变量预创建metadata数据库,省略手动建库的步骤,修改services段即可:
services: postgres: image: postgres:latest env: POSTGRES_DB: metadata POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres ports: - 5432:5432 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
后续故障排查方向
如果修复后仍有问题,可按以下步骤定位:
- 在跑测试前新增一步验证命令,确认
awips用户可以正常登录数据库:
- name: 验证数据库连接 run: psql -h localhost -U awips metadata env: PGPASSWORD: awips
如果该步失败,说明账号权限/密码配置仍有问题;如果该步成功但nosetests仍报错,说明你的应用代码未正确读取环境变量中的数据库连接参数。
- 检查你的数据库连接逻辑,确认没有硬编码的连接参数覆盖了环境变量配置。
- 15分钟超时属于连接重试导致的异常等待,修复认证问题后运行时长会恢复正常。
内容的提问来源于stack exchange,提问作者PAUL MENA
相关产品推荐
相关产品推荐

