You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Github Actions运行Rails+Selenium功能测试遇连接错误求助

问题分析与解决方案

你遇到的Connection refused - connect(2) for "172.17.0.1" port 80错误,主要源于3个核心配置问题:Selenium服务缩进错误、环境变量缺失、Capybara驱动地址指向错误。以下是针对性的修正方案:


1. 修正GitHub Actions配置文件(github_action_ci.yml)

原配置中Selenium服务嵌套在Postgres服务下,导致容器未正常启动;同时缺少关键环境变量定义。修正后的完整配置如下:

name: "Ruby on Rails CI"
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
jobs:
  run-rspec-tests:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:12
        ports:
          - "5433:5432"
        options: >-
            --health-cmd pg_isready
            --health-interval 10s
            --health-timeout 5s
            --health-retries 5
        env:
          POSTGRES_DB: db_test
          POSTGRES_USER: username
          POSTGRES_PASSWORD: password
      browser: # 修正缩进:与postgres同级,确保服务正常启动
        image: selenium/standalone-chrome-debug
        ports:
          - "5900:5900" # VNC访问端口
          - "4444:4444" # WebDriver访问端口
        options: >-
          --shm-size=2g # 增加共享内存,避免Chrome崩溃
    env:
      RAILS_ENV: test
      DATABASE_URL: "postgres://username:password@localhost:5433/db_test"
      SERVER_PORT: 3000 # 指定应用运行端口
      SELENIUM_URL: "http://browser:4444/wd/hub" # Selenium服务地址
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Set App Host Env Var
        run: |
          # 获取Runner网关地址,供Selenium容器访问Rails应用
          echo "APP_HOST=$(docker network inspect bridge --format='{{(index .IPAM.Config 0).Gateway}}')" >> "$GITHUB_ENV"
      - name: Install Ruby and gems
        uses: ruby/setup-ruby@v1
        with:
          bundler-cache: true
      - name: Set up database schema
        run: |
          bin/rails db:schema:load
      - name: Run specs
        run: |
          bundle exec rspec

2. 修正Capybara配置文件(spec/support/capybara.rb)

原配置中远程驱动URL指向错误,且缺少CI环境下Chrome的必要启动参数。修正后的代码如下:

require 'capybara/rails'
require 'capybara/rspec'

if ENV["CI"]
  Capybara.register_driver :remote_chrome do |app|
    options = Selenium::WebDriver::Chrome::Options.new
    options.add_argument("--headless")
    options.add_argument("--no-sandbox") # CI环境必备,避免权限问题
    options.add_argument("--disable-dev-shm-usage") # 解决共享内存不足问题

    Capybara::Selenium::Driver.new(
      app,
      browser: :remote,
      url: ENV['SELENIUM_URL'], # 指向Selenium服务端点
      options: options
    )
  end

  Capybara.configure do |config|
    config.run_server = true
    config.javascript_driver = :remote_chrome
    config.app_host = "http://#{ENV['APP_HOST']}:#{ENV['SERVER_PORT']}" # Selenium访问应用的地址
    config.server_host = '0.0.0.0' # 让应用绑定所有网卡,允许外部访问
    config.server_port = ENV['SERVER_PORT']
    config.always_include_port = true
    config.default_max_wait_time = 4
  end
else
  Capybara.javascript_driver = :selenium_chrome
end

关键修改说明

  • 修复Selenium服务缩进:确保服务与Postgres同级,避免容器未启动
  • 添加环境变量:SERVER_PORT指定应用端口,SELENIUM_URL指向Selenium服务,APP_HOST提供容器访问应用的网关地址
  • 修正驱动URL:远程驱动必须指向Selenium的/wd/hub端点,而非应用服务器
  • Chrome启动参数:--no-sandbox和--disable-dev-shm-usage解决CI环境下Chrome运行的权限与内存问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:00:30