実現したいこと
- [ ]Docker環境にてシステムスペックを動かしたい
前提
Docker環境のRails6にてシステムスペックを動かしたいです。
発生している問題・エラーメッセージ
Selenium::WebDriver::Error::WebDriverError: unable to connect to /root/.cache/selenium/chromedriver/linux64/114.0.5735.90/chromedriver 127.0.0.1:9515
該当のソースコード
Ruby
1# spec/support/capybara.rb 2 3 4require 'capybara/rspec' 5require 'selenium/webdriver' 6Capybara.register_driver :remote_chrome do |app| 7 url = ENV['SELENIUM_DRIVER_URL'] 8 options = ::Selenium::WebDriver::Chrome::Options.new 9 options.add_argument('--no-sandbox') 10 options.add_argument('--disable-dev-shm-usage') 11 # options.add_argument('--headless') 12 options.add_argument('--disable-gpu') 13 options.add_argument('--window-size=1680,1050') 14 Capybara::Selenium::Driver.new(app, browser: :remote, url: url, options: options) 15end 16RSpec.configure do |config| 17 config.before(:each, type: :system, js: true) do 18 Capybara.server_host = "0.0.0.0" 19 Capybara.app_host = 'http://app' 20 driven_by :remote_chrome 21 end 22end
# spec/rails_helper.rb require 'spec_helper' ENV['RAILS_ENV'] ||= 'test' require_relative '../config/environment' # Prevent database truncation if the environment is production abort("The Rails environment is running in production mode!") if Rails.env.production? require 'rspec/rails' require 'factory_bot_rails' Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } # Add additional requires below this line. Rails is not loaded until this point! # Requires supporting ruby files with custom matchers and macros, etc, in # spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are # run as spec files by default. This means that files in spec/support that end # in _spec.rb will both be required and run as specs, causing the specs to be # run twice. It is recommended that you do not name files matching this glob to # end with _spec.rb. You can configure this pattern with the --pattern # option on the command line or in ~/.rspec, .rspec or `.rspec-local`. # # The following line is provided for convenience purposes. It has the downside # of increasing the boot-up time by auto-requiring all files in the support # directory. Alternatively, in the individual `*_spec.rb` files, manually # require only the support files necessary. # # Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } # Checks for pending migrations and applies them before tests are run. # If you are not using ActiveRecord, you can remove these lines. begin ActiveRecord::Migration.maintain_test_schema! rescue ActiveRecord::PendingMigrationError => e abort e.to_s.strip end RSpec.configure do |config| # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures config.fixture_path = "#{Rails.root}/spec/fixtures" config.include FactoryBot::Syntax::Methods # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false # instead of true. config.use_transactional_fixtures = true # You can uncomment this line to turn off ActiveRecord support entirely. # config.use_active_record = false # RSpec Rails can automatically mix in different behaviours to your tests # based on their file location, for example enabling you to call `get` and # `post` in specs under `spec/controllers`. # # You can disable this behaviour by removing the line below, and instead # explicitly tag your specs with their type, e.g.: # # RSpec.describe UsersController, type: :controller do # # ... # end # # The different available types are documented in the features, such as in # https://rspec.info/features/6-0/rspec-rails config.infer_spec_type_from_file_location! # Filter lines from Rails gems in backtraces. config.filter_rails_from_backtrace! # arbitrary gems may also be filtered via: # config.filter_gems_from_backtrace("gem name") config.include Rails.application.routes.url_helpers config.include FactoryBot::Syntax::Methods # config.include CapybaraSpecHelper, type: :system # config.include LoginMacros end
# spec/spec_helper.rb # See https://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration RSpec.configure do |config| # rspec-expectations config goes here. You can use an alternate # assertion/expectation library such as wrong or the stdlib/minitest # assertions if you prefer. config.expect_with :rspec do |expectations| # This option will default to `true` in RSpec 4. It makes the `description` # and `failure_message` of custom matchers include text for helper methods # defined using `chain`, e.g.: # be_bigger_than(2).and_smaller_than(4).description # # => "be bigger than 2 and smaller than 4" # ...rather than: # # => "be bigger than 2" expectations.include_chain_clauses_in_custom_matcher_descriptions = true end # rspec-mocks config goes here. You can use an alternate test double # library (such as bogus or mocha) by changing the `mock_with` option here. config.mock_with :rspec do |mocks| # Prevents you from mocking or stubbing a method that does not exist on # a real object. This is generally recommended, and will default to # `true` in RSpec 4. mocks.verify_partial_doubles = true end # This option will default to `:apply_to_host_groups` in RSpec 4 (and will # have no way to turn it off -- the option exists only for backwards # compatibility in RSpec 3). It causes shared context metadata to be # inherited by the metadata hash of host groups and examples, rather than # triggering implicit auto-inclusion in groups with matching metadata. config.shared_context_metadata_behavior = :apply_to_host_groups # The settings below are suggested to provide a good initial experience # with RSpec, but feel free to customize to your heart's content. # # This allows you to limit a spec run to individual examples or groups # # you care about by tagging them with `:focus` metadata. When nothing # # is tagged with `:focus`, all examples get run. RSpec also provides # # aliases for `it`, `describe`, and `context` that include `:focus` # # metadata: `fit`, `fdescribe` and `fcontext`, respectively. config.filter_run_when_matching :focus # # # Allows RSpec to persist some state between runs in order to support # # the `--only-failures` and `--next-failure` CLI options. We recommend # # you configure your source control system to ignore this file. # config.example_status_persistence_file_path = "spec/examples.txt" # # # Limits the available syntax to the non-monkey patched syntax that is # # recommended. For more details, see: # # https://rspec.info/features/3-12/rspec-core/configuration/zero-monkey-patching-mode/ # config.disable_monkey_patching! # # # Many RSpec users commonly either run the entire suite or an individual # # file, and it's useful to allow more verbose output when running an # # individual spec file. # if config.files_to_run.one? # # Use the documentation formatter for detailed output, # # unless a formatter has already been configured # # (e.g. via a command-line flag). # config.default_formatter = "doc" # end # # # Print the 10 slowest examples and example groups at the # # end of the spec run, to help surface which specs are running # # particularly slow. # config.profile_examples = 10 # # # Run specs in random order to surface order dependencies. If you find an # # order dependency and want to debug it, you can fix the order by providing # # the seed, which is printed after each run. # # --seed 1234 # config.order = :random # # # Seed global randomization in this process using the `--seed` CLI option. # # Setting this allows you to use `--seed` to deterministically reproduce # # test failures related to randomization by passing the same `--seed` value # # as the one that triggered the failure. # Kernel.srand config.seed end
# docker-compose.yml version: '3' services: db: platform: linux/x86_64 image: mysql:5.7 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci ports: - "3306:3306" volumes: - ./tmp/db:/var/lib/mysql - ./my.cnf:/etc/mysql/conf.d/my.cnf environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: majan_circle_development app: build: context: . dockerfile: "./docker/rails/DockerFile" command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" ports: - "3000:3000" volumes: - .:/majan_circle depends_on: - db stdin_open: true tty: true environment: - "SELENIUM_DRIVER_URL=http://selenium_chrome:4444/wd/hub" selenium_chrome: image: seleniarm/standalone-chromium ports: - "4444:4444" logging: driver: none
試したこと
自分のChromeのバージョンが114.0.5735.133
なので、pip install chromedriver-binary==114.0.5735.90.0
のコマンドでバージョンを合わせるようにした
追記
ただDocker環境にてwebdriverのイメージを取得したときは自動的にchromeとwebdriverのバージョンが合った状態で
インストールされるとありました(下記記事を参照)
docker-composeファイルの記述が間違っているのでしょうか。
https://qiita.com/Chanmoro/items/9a3c86bb465c1cce738a
うまくいかず手詰まりの状態です。ご教示いただければ幸いです。
あなたの回答
tips
プレビュー