LoginSignup
0
1

More than 3 years have passed since last update.

CircleCIで複数のイメージを利用する場合の注意点

Posted at

発生した事象

CICDフローにおいて、CircleCi上でrspecを実行するために準備としてrails db:createを実行した。
しかし、実行中にDB接続エラーが発生した。

結論

CircleCIのジョブ実行において複数のイメージ指定する場合、DBの接続ホスト指定はlocalhostを指定ではなく127.0.0.1を使おう。

失敗時のエラーメッセージ

rails aborted!
Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")

良くあるrailsからDBへの接続エラーですね。   
ローカルのmysqlを参照しにいこうとしている様子。

現状の設定見直し

接続エラーなので、DBの接続情報の設定を見直してみる。

Circleciのconfig.yml

接続コマンドや環境変数やRAILS_ENVも適切で問題なさそう。

Ruby on Railsで利用している database.yml

設定ファイル上に、DB接続ホスト、ユーザ名、DB名が指定してあるため接続には問題なさそう。

調査

調査を進めると次の記事にヒットしました。

また、各コンテナ間の連携には localhost を使うことはできません。 127.0.0.1 を指定するようにすることと、Rails であれば config/database.yml で以下のような記述を追加することを忘れないようにしましょう。
https://tech.smarthr.jp/entry/2017/07/12/073000

対応

上記の記事より、本件も同一事象と仮定しrailsで指定しているDBのhost指定を、localhostではなく、127.0.0.1に変更し動作確認。

jobの確認

#!/bin/bash -eo pipefail
bundle exec rails db:create
bundle exec rails db:migrate
bundle exec rspec
Created database 'hoge'
(中略)
Finished in 0.00373 seconds (files took 0.87988 seconds to load)

実行も完了し、ジョブも正常終了したのでOK!。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1