Github Actions配置Ruby项目遇PG::ConnectionBad域名解析失败求助
解决GitHub Actions中PostgreSQL连接错误:
PG::ConnectionBad: could not translate host name "db" to address 问题核心
错误提示里的主机名是db,但你在GitHub Actions的环境变量中配置的是localhost,说明你的Rails项目config/database.yml文件的test环境配置里,数据库主机被硬编码为db,没有正确读取环境变量,导致连接失败。同时还存在环境变量密码不匹配的问题。
修复步骤
1. 修正config/database.yml的test环境配置
确保test环境的配置优先读取环境变量,避免硬编码主机名:
test: adapter: postgresql database: <%= ENV.fetch("PG_DATABASE") { "your_app_test" } %> host: <%= ENV.fetch("PG_HOST") { "localhost" } %> username: <%= ENV.fetch("PG_USER") { "postgres" } %> password: <%= ENV.fetch("PG_PASSWORD") { "postgres" } %> port: 5432 encoding: unicode
替换your_app_test为你实际的测试数据库名称。
2. 统一GitHub Actions中的密码配置
你在services.postgres里设置的POSTGRES_PASSWORD是postgres,但在Setup database步骤的PG_PASSWORD写的是password,两者不匹配会导致认证失败,修正为一致的密码:
- name: Setup database env: PG_DATABASE: postgres PG_HOST: localhost PG_USER: postgres PG_PASSWORD: postgres # 与services中的密码保持一致 RAILS_ENV: test WITH_COVERAGE: true DISABLE_SPRING: 1 run: | bundle exec rails db:setup
3. 简化冗余的GitHub Actions步骤
ruby/setup-ruby@v1的bundler-cache: true已经会自动安装bundler和依赖包,不需要单独执行gem install bundler和bundle install,优化后的完整配置如下:
name: CI on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: test: runs-on: ubuntu-latest services: postgres: image: postgres env: POSTGRES_PASSWORD: postgres ports: ['5432:5432'] # 添加健康检查,确保PostgreSQL完全启动后再执行后续步骤 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v2 - name: Setup Ruby uses: ruby/setup-ruby@v1 with: bundler-cache: true - name: Install System Dependencies run: sudo apt install -yqq libpq-dev - name: Setup database env: PG_DATABASE: postgres PG_HOST: localhost PG_USER: postgres PG_PASSWORD: postgres RAILS_ENV: test WITH_COVERAGE: true DISABLE_SPRING: 1 run: | bundle exec rails db:setup - name: Run Tests env: PGHOST: localhost PGUSER: postgres PGPASSWORD: postgres RAILS_ENV: test run: | bundle exec rake test
内容的提问来源于stack exchange,提问作者Victoria
相关产品推荐
相关产品推荐

