如何为多域应用程序设置Github CI for Rails + Rspec + Capybara和Selenium Webdrivers?

问题描述

问题

在Github的CI上运行时,尝试访问页面时出现SocketError: getaddrinfo: Name or service not kNown

     2.1) Failure/Error: visit '/'

          SocketError:
            getaddrinfo: Name or service not kNown



          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/server.rb:110:in `initialize'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/server.rb:110:in `new'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/server.rb:110:in `find_available_port'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/server.rb:37:in `initialize'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/session.rb:93:in `new'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/session.rb:93:in `initialize'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara.rb:424:in `new'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara.rb:424:in `block in session_pool'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara.rb:315:in `current_session'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/dsl.rb:46:in `page'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/dsl.rb:58:in `block (2 levels) in <module:DSL>'
          # ./spec/system/register_system_spec.rb:8:in `block (3 levels) in <main>'


     2.2) Failure/Error: server = Tcpserver.new(host,0)

          SocketError:
            getaddrinfo: Name or service not kNown



          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/server.rb:110:in `initialize'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/server.rb:110:in `new'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/server.rb:110:in `find_available_port'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/server.rb:37:in `initialize'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/session.rb:93:in `new'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/session.rb:93:in `initialize'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara.rb:424:in `new'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara.rb:424:in `block in session_pool'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara.rb:315:in `current_session'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/capybara-3.33.0/lib/capybara/dsl.rb:46:in `page'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/actionpack-5.2.4.2/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb:54:in `save_image'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/actionpack-5.2.4.2/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb:25:in `take_screenshot'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/actionpack-5.2.4.2/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb:37:in `take_Failed_screenshot'
          # /usr/share/rvm/gems/ruby-2.5.5/gems/actionpack-5.2.4.2/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb:21:in `after_teardown'

使用rspecselenium_google_chrome_headlessselenium_google_chrome都可以在我的本地环境上正确运行测试。

应用

  • 这是一个多域应用程序,因此我的测试使用
before { Capybara.app_host = "http://#{subdomain}.myapp.test" }
  • 库版本
    • Ruby 2.5.5
    • gem 'rails','~> 5.2.4'
    • gem 'rspec-rails','~> 3.8'
    • capybara (3.33.0)
    • webdrivers (4.4.1)
      • selenium-webdriver (3.142.7)
  • 这是我的Github CI工作流程
env:
  RUBY_VERSION: 2.5.5
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Start database
        run: |
          sudo systemctl start MysqL
      - name: Set up Ruby 2.5.5
        run: |
          sudo apt-add-repository -y ppa:rael-gc/rvm
          sudo apt-get update
          sudo apt-get -y install rvm
          source /etc/profile.d/rvm.sh
          rvm install ${{ env.RUBY_VERSION }}
      - name: setup-chromedriver
        uses: nanasess/[email protected]
      - name: Build and test
        env:
          DATABASE_PASSWORD: root
        run: |
          source /etc/profile.d/rvm.sh
          rvm use ${{ env.RUBY_VERSION }}
          gem install bundler
          bundle install --jobs 4 --retry 3
          MysqL -uroot -p${{ env.DATABASE_PASSWORD }} --execute="CREATE DATABASE myapp_test"
          RAILS_ENV=test rails db:setup
          bundle exec rspec spec/system

解决方法

使用 :headless_chrome 作为 javascript 浏览器,在 spec/spec_helper.rb 中有 this 配置

,

添加

Capybara.server = :puma

到我的spec/rails_helper.rb文件似乎可以解决我的主要问题。

我的测试仍然没有通过Github Action,但是看起来是另一个问题。