LoginSignup
0
0

More than 3 years have passed since last update.

【Rails】Travis CIを導入してdb:createで詰まったこと

Last updated at Posted at 2020-11-08

はじめに

自動テストツールTravis CIを導入するときにつまづいたことを書きます。

環境

・Ruby 2.6.5
・Rails 6.0.3.2
・Mysql Ver 14.14 Distrib 5.6.47

問題点

以下のような.travis.ymlに記述しているdb:createがどうしても通らないという問題が発生しました。


script:
  - bundle exec rake db:create RAILS_ENV=test
  - bundle exec rake db:migrate RAILS_ENV=test
  - bundle exec rspec

Travis CIの画面ではこのようなエラーメッセージがでました。

DBcreate.png

Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

いろいろ調べてみるとソケットファイルが無いということがわかりました。
database.ymlの記述のソケットファイルへのパスが誤っているということです。
今回使用したDBは MySQLです。


test:
  <<: *default
  database: (myapp)_test
  adapter: mysql2
  encoding: utf8
  username: root
  password:
  socket: (ここの記述)

解決策

でもローカルではないTravis CIのなかのファイル構成はどうしてもわからなかったので自力で確認することにしました。

まずはソケットファイルの場所を調べるコマンドは以下です。

$ mysql_config --socket

ローカル環境ではこれでわかるので、もしかしたら.travis.ymlscript:に記述すれば「Travis CI上のmysqld.sockの場所がわかるかもと思い、この記述をプラスしました。(正しいやり方かはわかりませんけど・・・)


script:
  - mysql_config --socket  (←ソケットファイルを確認する)
  - bundle exec rake db:create RAILS_ENV=test
  - bundle exec rake db:migrate RAILS_ENV=test
  - bundle exec rspec

すると、

MySQL.soke.png

なんと値が返ってきました!515行目の記述です!

/var/run/mysql/mysqld.sock

これをdatabase.ymlに記述すれば、無事にdb:createが通りました!

ローカルの時とTravisCIの時の使い分け

このままだと逆にローカルでのテストがうまくいかないのでTravisCIでのテストの時には上記でしらべたソケットを参照するようにします。

TravisCI専用としてdatabase_travis.ymlを作成し以下のような記述。


test:
  <<: *default
  database: (myapp)_test
  adapter: mysql2
  encoding: utf8
  username: root
  password:
  socket: /var/run/mysqld/mysqld.sock

そして.travis.ymlに以下を追記


before_script:
  - "cp config/database_travis.yml config/database.yml"

この時だけ書き換えるようにしたらローカルでもTravisCIでもテストが動きました。
データベースのエラーはなかなか原因にたどり着けなく苦労しました。

buildpass.png

無事にこのバッジをReadmeにつけることができました!!

0
0
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
0