ユアマイスター株式会社エンジニアブログ

ユアマイスター株式会社のエンジニアが日々徒然。

Circle CI で PHPUnit 動かしたいと思ったら SQLSTATE[HY000] [2002] No such file or directory

こんにちは、ユアマイスターの星です。

弊社では、CIツールとして Circle CIを使っています。

導入時にうまくいかなかったポイントとその解決方法を書いておきたいと思います。

背景

Circle CIではcircle.ymlという設定ファイルで、

初期条件や実行コマンドなど様々な設定が可能になっています。

Collecting test metadata - CircleCI

テストコード環境としてCakePHPプロジェクトの中で、PHPUnitを使っているわけですが、

Circle CI でも標準サポートしており、よくあるテスト通過→デプロイの流れを作ろうとしてました。

そんな中で色々設定を進めていくと、migration実行のくだりで必ずエラーが発生した。

Exception: There was a problem connecting to the database: SQLSTATE[HY000] [2002] No such file or directory in [/home/ .....

ローカルでテスト通ってるのにそんなわけアルカイ!と思いながらDB設定情報を確認する。

DB名・・・あってる。

DBユーザー名・・・あってる。

ホスト名・・・あってる。

パスワード・・・あってる。

Circle CIの機能の Debug via SSH も使いながらMySQLへのアクセスを確認するが、普通にログインができる。

そして色々Google検索したところ、名前解決の問題っぽいと推測できました。

解決策

www.drupal.org

localhost127.0.0.1 に書き換えることでうまいこと migration も通すことができました。

ちなみに元の設定ファイルを書き換えて、実際のSTG環境に影響を与えるのが嫌だったので、

Circle CI で実行の度に書き換える形にしています。

dependencies:
    override:
        - grep -l 'localhost' config/hogehoge.php | xargs sed -i.bak -e 's/localhost/127.0.0.1/g'

気になること

Circle CI のインスタンスの中で hostsファイルを見てみても、ちゃんとlocalhost から 127.0.0.1へ名前を引けるようになっているのに、なんでCircle CI のプロセスだとうまくいかないんだろうか・・・