質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Capybara

Capybaraは、 Rubyで開発されているWebアプリケーションテストフレームワークです。Webブラウザ不要でブラウザ上のユーザー操作及びJavaScriptの挙動を自動化することができます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

263閲覧

GitHubActionにおけるCapybara実行時のエラーについて #ruby on rails

kapi819

総合スコア1

Capybara

Capybaraは、 Rubyで開発されているWebアプリケーションテストフレームワークです。Webブラウザ不要でブラウザ上のユーザー操作及びJavaScriptの挙動を自動化することができます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2024/07/23 02:03

 自力ではどうしても解消することが出来ず、皆様のお知恵を拝借出来れば幸いです。どうぞ、よろしくお願いします。

実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

Docker fileのコンテナとGit Hub Actionのポート番号の競合が原因だったため、以下の通りポート番号を変更したことで解決しました。

chrome: image: seleniarm/standalone-chromium:latest ports: - 4444:4444
chrome: image: seleniarm/standalone-chromium:latest ports: - 4445:4444

投稿2024/07/23 09:07

編集2024/07/23 09:08
kapi819

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問