問題点
GithubActionsでRSpec(MySQL8.0)を動かそうとしたら、mysql-clientが5.7でうまく動かなかった。
RSpecの実行にて以下のエラーが発生
Mysql2::Error::ConnectionError:
Plugin caching_sha2_password could not be loaded: /usr//usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory
結論
.github/workflows/rspec.yml
name: rspec
on:
push:
paths-ignore:
- README.md
- Dockerfile
- docker-compose.yml
jobs:
rspec:
name: RSpec
runs-on: ubuntu-latest
env:
RAILS_ENV: test
services:
mysql:
image: mysql:8.0.15
env:
MYSQL_ROOT_PASSWORD: pass
container:
image: ruby:2.6.5-alpine
env:
MYSQL_HOST: mysql
MYSQL_ROOT_PASSWORD: pass
steps:
- uses: actions/checkout@v1
- name: Setup container
run: |
apk --update add build-base libxml2-dev libxslt-dev mysql-dev mysql-client openssl tzdata && \
- name: Gem install
run: |
gem update --system && gem install bundler --no-document && bundle install -j4
- name: Setup test DB
run: |
bundle exec rails db:setup
- name: Run RSpec
run: |
bundle exec rspec
問題点
- MySQL8.0から認証方式が
caching_sha2_password
に変更された - debian系のDockerコンテナに入っているmysql-clientの
5.7
では新しい認証方式に対応していない - 対応するには、mysql-clientを
8.0
にするか、認証方式を旧来のものに必要がある
対応
- debian系はリポジトリ登録したり、8.0系のクライアントを入れるのに手間がかかるので、alpineにして必要なものをいろいろ突っ込んだ
- ライブラリ周りは必要に応じて加えたり、省いたりしてください
- キャッシュは考慮していません
- GithubActionsでdocker-composeの
command
的なことをやることがうまくできなかったので、認証方式を変更することは諦めました...