コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

CircleCIでrubyのイメージを使っている際にmysql-clientがなくてエラーになってしまう場合はdefault-mysql-clientを入れてあげると解決できる

時事ネタ、かつ暫定的なトラブルシュート

環境

  • CiecleCI (version2) でCIを動かしている
    • Railsアプリ
    • bundle installなどを.circleci/config.ymlでやってる
    • DBはMySQL
    • JSのコードも有るので使っていたイメージは circleci/ruby:2.6.3-node-browsers

発端

とあるタイミングから動いていたCIが突然失敗するようになった、エラーとしては

rake aborted!
LoadError: libmariadbclient.so.18: cannot open shared object file: No such file or directory - /home/circleci/rails_app/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2/lib/mysql2/mysql2.so

というようにMySQLになにかしようとしたらclientがないよエラー

原因

  • Debian GNU/Linux 10 (buster) からはmysql-clientがなくなった
  • circleciで配布しているイメージでDebianOSを指定しないタグを使っているとよしなにバージョンアップしている

ということでこの2つの合わせわざが起こした事象の様子

参考ツイート

解決策

  • default-mysql-clientを入れる
  • その後にbundle installをかけてmysql2のgemで正しく紐付けてもらう

なのでstepとして

- run:
    name: default mysql client install
    command: |
      sudo apt update
      sudo apt-get install default-mysql-client
- run:
    name: bundle Install
    command: bundle install --path vendor/bundle

みたいな順番で対処すれば解決

参考サイト