mitsu1208g
@mitsu1208g (洋満 大石)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ローカル環境のCircleCIでMysql2::Error::ConnectionError: Unknown MySQL server host 'db' (-2)が出る

CircleCIでデータベースエラーが起こってしまい改善の仕方がわかりません。

Docker環境は導入しています。

本番環境はEC2です。

database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  host: db
  socket: /tmp/mysql.sock
  ports: 3306

development:
  <<: *default
  socket: /tmp/mysql.sock
  database: myapp_development

test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  database: myapp_production
  username: root
  password: <%= ENV['DATABASE_PASSWORD'] %>
  socket: /var/lib/mysql/mysql.sock
crcleci/config.yml
version: 2.1
jobs:
 build:
   docker:
   - image: circleci/ruby:2.6.5-node
     environment:
       RAILS_ENV: test
   - image: circleci/mysql:5.7-ram
     environment:
       MYSQL_DATABASE: myapp_test
       MYSQL_ALLOW_EMPTY_PASSWORD: true
       MYSQL_ROOT_HOST: '%'
       MYSQL_USER: root
       MYSQL_PORT: 3306
   working_directory: ~/myapp
   steps:
   - checkout
   - restore_cache:
       keys:
       - v1-dependencies-{{ checksum "Gemfile.lock" }}
       - v1-dependencies-
   - run:
       name: install dependencies
       command: |
         gem install bundler -v 2.0.1
         bundle install --jobs=4 --retry=3 --path vendor/bundle
   - save_cache:
       paths:
       - ./vendor/bundle
       key: v1-dependencies-{{ checksum "Gemfile.lock" }}
   # Database setup
   - run:
       name: Prepare db
       command: |
        bin/rails db:schema:load --trace
   # run tests!
   - run:
       name: Run rspec
       command: |
         mkdir /tmp/test-results
         TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)"
         bundle exec rspec --format progress --color --format documentation

   # collect reports
   - store_test_results:
       path: /tmp/test-results
   - store_artifacts:
       path: /tmp/test-results
       destination: test-results

bb7ea4c83bb1c824ded14dfa9dbc1a81.png

仮説

データベースが見つからないと言われているので、database.ymlのhostやsocketが間違っている

試したこと

・% mysql.server restartでmysql再起動
・Docker-compose up の状態でpush
・datebase.ymlのdefaultで、「password: password」と「host: db」をコメントアウトしてみる。
・socketを/var/lib/mysql/mysql.sockにしてみる。
・% mysql_config --socketで/tmp/mysql.sockがあるのを確認

このエラーで半月ほど解決できず、ハンズオン情報を読んでみてもわかりません。
それぞれの記述の意味もわかるのですが、なぜデータベースが見つからないのか・・・

どうかご指摘頂けませんでしょうか。

宜しくお願い申し上げます。

1

1Answer

darabase.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  # password: password
  # host: db


development:
  <<: *default
  socket: /tmp/mysql.sock
  database: myapp_development

test:
  <<: *default
  database: myapp_test
  host: <%= ENV['MYSQL_ROOT_HOST'] || '127.0.0.1' %>

のようにtestのhostにローカルホストを指定することで解決しました

2Like

Your answer might help someone💌