Github 操作工作流 PG::ConnectionBad:无法连接到服务器:运行 bundle exec rake 时没有这样的文件或目录

Posted

技术标签:

【中文标题】Github 操作工作流 PG::ConnectionBad:无法连接到服务器:运行 bundle exec rake 时没有这样的文件或目录【英文标题】:Github actions workflow PG::ConnectionBad: could not connect to server: No such file or directory when running bundle exec rake 【发布时间】:2020-10-28 04:34:11 【问题描述】:

这是我的第一个问题。

我正在尝试将 github actions 集成到我的 rails 项目中。

我的 ruby​​.yml 是这样的:

name: Ruby

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  test:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Ruby
      uses: ruby/setup-ruby@ec106b438a1ff6ff112340de34ddc62c540232e0
      with:
        ruby-version: 2.6.5
    - name: Install dependencies
      run: bundle install
    - name: Run tests
      run: bundle exec rake

捆绑步骤需要很多时间,我不知道我是否可以只加载 Gemfile.lock 而不是每次都运行捆绑。但它运行正常。

问题在于测试步骤。

所以这是错误:

rails aborted!
PG::ConnectionBad: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
/home/runner/work/project/project/test/test_helper.rb:10:in `<main>'
/home/runner/work/project/project/test/application_system_test_case.rb:1:in `<main>'
/home/runner/work/project/project/test/system/create_practice_test.rb:1:in `<main>'
/home/runner/work/GPLM/GPLM/bin/rails:9:in `<top (required)>'
/home/runner/work/GPLM/GPLM/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => test:system
(See full trace by running task with --trace)
Coverage report generated for Minitest to /home/runner/work/project/project/coverage. 31 / 3352 LOC (0.92%) covered.
SimpleCov failed with exit 1
##[error]Process completed with exit code 1.

谢谢大家。

【问题讨论】:

看起来您缺少设置 Postgres 的步骤。如果您在本地运行数据库服务器,则在构建步骤中还必须设置 postgres 管理员。 【参考方案1】:

您需要将 Postgres 服务添加到您的 GitHub Action 配置中。例如:

services:
  postgres:
    image: postgres:11
      env:
        POSTGRES_PASSWORD: postgres
        POSTGRES_USER: postgres
      options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
      ports:
        - 5432:5432

bundle install之前需要安装依赖库:

- name: Install library for postgres
  run: sudo apt-get install libpq-dev

不要忘记设置数据库:

- name: Setup Database
  run: |
    cp config/YOUR_GITHUB_ACTIONS_DATABASE.yml config/database.yml
    bundle exec rails db:setup
  env:
    POSTGRES_PASSWORD: postgres
    POSTGRES_USER: postgres
    RAILS_ENV: test

当然,您必须根据具体情况定制命令。 最简单的方法是拥有一个专门用于 GitHub Actions 的单独数据库配置文件。但是您也可以为 CI 提供一个特殊的环境。

【讨论】:

非常感谢!有用!但现在我有另一个问题:运行 bundle exec rake /home/runner/.rubies/ruby-2.6.5/bin/ruby: invalid option -: (-h will show valid options) (RuntimeError) ##[error]Process以退出代码 1 完成。由于某种原因,它无法识别 bundle exec rake 命令顺便说一句,再次感谢您 感谢您的回答。你能解释一下这一步吗:cp config/YOUR_GITHUB_ACTIONS_DATABASE.yml config/database.yml

以上是关于Github 操作工作流 PG::ConnectionBad:无法连接到服务器:运行 bundle exec rake 时没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 github 操作从 Github 中存储库 A 的工作流作业触发存储库 B(下游作业)中的工作流作业

用于 ARM 部署的 GitHub 操作

GitHub 操作工作流计划不适用于非默认分支

如何在 GitHub 操作中将工作目录添加到部署

在 github 操作中触发工作流之前,我们可以等待另一个 repo 工作流完成吗?

Github 操作在作业之间共享工作区/工件?