自力ではどうしても解消することが出来ず、皆様のお知恵を拝借出来れば幸いです。どうぞ、よろしくお願いします。
実現したいこと
Git Hub ActionsにおけるRspec(Capybara)実行時に、Address already in use - bind(2) for "10.1.0.91" port 4444 (Errno::EADDRINUSE)
とエラーが表示されているため、エラーを解消したい。
前提
現在、Git Hub Actionsを実装しているところ、Rspec(Capybara)実行時に、
Address already in use - bind(2) for "10.1.0.91" port 4444 (Errno::EADDRINUSE)
とエラーが表示されており、VSコード上でコマンドを指示した際に成功するテストが、Git Hub Actions上で失敗すること。
発生している問題・エラーメッセージ
- リストGit Hub Action実行時におけるRspecエラー文(抜粋)
/home/runner/work/portfolio_2/portfolio_2/vendor/bundle/ruby/3.2.0/gems/puma-6.4.2/lib/puma/binder.rb:334:in `initialize': Address already in use - bind(2) for "10.1.0.91" port 4444 (Errno::EADDRINUSE)
- リストエラーの意味とエラー内容から推測される原因
ChatGPTより参照
ポート4444が既に他のプロセスによって使用されているため、Pumaがそのポートにバインドできないことを示しています。
該当のソースコード
.github/workflows/main.yml
name: Run rspec, rubocop on: push: env: RENDER_DB_URL: ${{secrets.RENDER_DB_URL}} jobs: rspec: runs-on: ubuntu-latest timeout-minutes: 10 services: postgres: env: POSTGRES_PASSWORD: password POSTGRES_DB: test image: postgres ports: - 5432:5432 chrome: image: seleniarm/standalone-chromium:latest ports: - 4444:4444 steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: bundler-cache: true - name: Set up Chrome uses: browser-actions/setup-chrome@v1 with: chrome-version: 120 install-dependencies: true - name: Cache node modules uses: actions/cache@v2 with: path: node_modules key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-node- - name: Bundler and gem install run: | gem install bundler bundle install --jobs 4 --retry 3 --path vendor/bundle - name: Yarn install run: yarn install --check-files - name: Check for port conflicts and set CAPYBARA_PORT run: | PORT=4444 if lsof -i:$PORT; then echo "Port $PORT is in use, killing the process" lsof -ti:$PORT | xargs kill -9 fi CAPYBARA_PORT=3001 echo "CAPYBARA_PORT=$CAPYBARA_PORT" >> $GITHUB_ENV echo "DEBUG: Capybara port set to $CAPYBARA_PORT" - name: Database create and migrate run: | cp config/database.yml.ci config/database.yml bundle exec rails db:create RAILS_ENV=test bundle exec rails db:migrate RAILS_ENV=test - name: assets precompile run: bundle exec rake assets:precompile RAILS_ENV=test - name: Run tests run: | echo "DEBUG: Running tests with SELENIUM_DRIVER_URL=$SELENIUM_DRIVER_URL and CAPYBARA_PORT=$CAPYBARA_PORT" bundle exec rspec env: SELENIUM_DRIVER_URL: http://localhost:4444/wd/hub CAPYBARA_PORT: ${{ env.CAPYBARA_PORT }} rubocop: runs-on: ubuntu-latest timeout-minutes: 10 steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: bundler-cache: true - name: Run rubocop run: bundle exec rubocop
/Users/fuwayuri/portfolio_2/spec/support/capybara.rb
ruby
1require 'capybara/rspec' 2require 'selenium/webdriver' 3 4Capybara.register_driver :remote_chrome do |app| 5 options = Selenium::WebDriver::Chrome::Options.new 6 options.add_argument('no-sandbox') 7 options.add_argument('headless') 8 options.add_argument('disable-gpu') 9 options.add_argument('window-size=1680,1050') 10 11 driver_url = ENV['SELENIUM_DRIVER_URL'] || 'http://localhost:4444/wd/hub' 12 puts "DEBUG: Using Selenium driver URL: #{driver_url}" 13 14 Capybara::Selenium::Driver.new(app, browser: :remote, url: driver_url, capabilities: options) 15end
/Users/fuwayuri/portfolio_2/spec/rails_helper.rb (本エラーと関連部分のみ抜粋)
ruby
1 config.before(:each, type: :system) do 2 driven_by :remote_chrome 3 Capybara.server_host = IPSocket.getaddress(Socket.gethostname) 4 Capybara.server_port = 4444 5 Capybara.app_host = "http://#{Capybara.server_host}:#{Capybara.server_port}" 6 Capybara.ignore_hidden_elements = false 7 end
/Users/fuwayuri/portfolio_2/compose.yml
version: '3' services: db: image: postgres restart: always environment: TZ: Asia/Tokyo POSTGRES_PASSWORD: password volumes: - postgresql_data:/var/lib/postgresql ports: - 5432:5432 web: build: context: . dockerfile: Dockerfile.dev command: bash -c "bundle install && bundle exec rails db:prepare && rm -f tmp/pids/server.pid && ./bin/dev" tty: true stdin_open: true volumes: - .:/myapp - bundle_data:/usr/local/bundle:cached - node_modules:/app/node_modules environment: TZ: Asia/Tokyo SELENIUM_DRIVER_URL: http://chrome:4444/wd/hub ports: - "3000:3000" depends_on: - db - chrome chrome: image: seleniarm/standalone-chromium:latest shm_size: 1g ports: - 4444:4444 volumes: bundle_data: postgresql_data: node_modules:
/Users/fuwayuri/portfolio_2/config/database.yml(本エラーと関連部分のみ抜粋)
default: &default adapter: postgresql encoding: unicode # For details on connection pooling, see Rails configuration guide # https://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> host: db username: postgres password: password test: <<: *default database: myapp_test
/Users/fuwayuri/portfolio_2/config/database.yml.ci
test: adapter: postgresql encoding: unicode username: postgres password: password host: localhost database: myapp_test
試したこと
- リスト実装する際に参考にした資料
Git Hub Actionを記載する際に、Git公式ドキュメント「GitHub Actions を理解する」を参照しました。また、本アプリではCapybara実行に当たり、chromeの環境を使用しているため、Google Chrome/Chromiumをセットするためのsetup-chromeを参照してGit Hub Actionを作成しています。
- リストエラーを解決するために調べた資料
全く同じエラーが発生している記事については、CircleCIのシステムスペックをselenium dockerを利用するが見つかりましたが、記載内容は、既に自身が実装した内容であったため、参考になりませんでした。また、本エラーの課題となっている4444のポート番号の競合を避けるため、本Draft Pull Requestの通りCapybaraを別ポートに指定をして、テスト実行時のデバッグログ上でポートの変更が出来ていることを確認しましたが、エラーの解消には至りませんでした。
デバッグログを出している、Git Hub Action上のコード
- name: Run tests run: | echo "DEBUG: Running tests with SELENIUM_DRIVER_URL=$SELENIUM_DRIVER_URL and CAPYBARA_PORT=$CAPYBARA_PORT"
デバッグログ
DEBUG: Running tests with SELENIUM_DRIVER_URL=http://localhost:4444/wd/hub and CAPYBARA_PORT=3001
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。