database.yml.ciの作成
開発環境でテスト用のDBをdbという名称のコンテナで動かし、Circleciでの自動テストのDBのイメージを別途.circleci/config.ymlに記述する場合、Circleciのテストで以下のようなエラーが起こることがある。
Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (-2)
これはdbというホスト名が定義されていないため生じるものであり、Circleciでのテスト用にdatabase.ymlを用意する必要がある。
そこで、以下のファイルを.circleci配下に作成する。
circleci/database.yml.ci
test:
adapter: mysql2
encoding: utf8mb4
pool: 5
username: root
password: password
database: appname_test
collation: utf8mb4_general_ci
host: 127.0.0.1 #ホストがlocalhostになるように定義している。
config.ymlの編集
また、それに伴い、database.yml.ciの内容をCircleciでのテスト用のコンテナのdatabase.ymlにコピーしなくてはならないので、.circleci/config.ymlのワークフローにも以下の追記を行う。
.circleci/config.yml
rspec:
docker:
- image: cimg/ruby:3.0.0-node
environment:
RAILS_ENV: test
DB_USERNAME: root
- image: circleci/mysql:5.6
environment:
- MYSQL_DATABASE: appname_test
- MYSQL_ROOT_PASSWORD: password
- MYSQL_ROOT_HOST: 127.0.0.1
working_directory: ~/appname
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "Gemfile.lock" }}-{{ checksum "yarn.lock" }}
- v1-dependencies-
- run:
name: update bundler
command: |
gem update --system
gem install bundler -v 1.10.6
- run: bundle install --jobs=4 --retry=3 --path vendor/bundle
- save_cache:
key: v1-dependencies-{{ checksum "Gemfile.lock" }}-{{ checksum "yarn.lock" }}
paths:
- ./vendor/bundle
- run: cp .circleci/database.yml.ci config/database.yml
# ↑このコードを追記。
- run: bundle exec rails db:create RAILS_ENV=test
- run: bundle exec rails db:schema:load RAILS_ENV=test
- run:
name: yarn Install
command: yarn install
- run: bundle exec bin/webpack
- run:
name: RSpec
command: bundle exec rspec