この記事について
Rails + MySQLなプロジェクトをCircleCI上で動作させようとした際に遭遇したエラーの対応メモ。随時加筆、修正。
都度必要な設定しか記載してないのでまるごとコピって使うようなことはできません。
CicleCIのconfig.ymlは2.1が最新なのだけど、現時点でCLIが対応していないらしいので2.0にて対応。
RailsのMASTER KEYが見つからない
Missing encryption key to decrypt file with. Ask your team for your master key and write it to /home/circleci/project/config/master.key or put it in the ENV['RAILS_MASTER_KEY'].
対応
パラメータで渡してあげる。キーは新たに生成しても、development環境と同じでも良いかと思う。
# .circleci/config.yml jobs: build: docker: - image: circleci/ruby:2.6.5 environment: RAILS_ENV: test RAILS_MASTER_KEY: b4d624125c4cb11b2391cf0015cdxxxx
タイムゾーンが異なってテストが通らない
対応
環境変数 TZ
をセット。ディストリビューションによってはTZは使えないこともあるらしい
# .circleci/config.yml jobs: build: docker: - image: circleci/ruby:2.6.5 environment: RAILS_ENV: test TZ: Asia/Tokyo - image: circleci/mysql:8.0.18 environment: TZ: Asia/Tokyo
MySQL接続エラー
Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/tmp/mysql.sock'
原因
MySQLに対して localhost
で接続しようとしている。Docker間ではTCPで接続するために 127.0.0.1
とするのが正解。以下のサイトが詳しい
ローカルポートのmysqlに対してTCPで接続する - Qiita
対応
database.yml
をhostを 127.0.0.1
にするか、環境変数 DB_HOST
を受け取るようにする
# config/database.yml default: &default adapter: mysql2 encoding: utf8mb4 host: <%= ENV['DB_HOST'] %>
環境変数にした場合は DB_HOST
を config.yml
ででセットする
# .circleci/config.yml jobs: build: docker: - image: circleci/ruby:2.6.5 environment: RAILS_ENV: test DB_HOST: "127.0.0.1"
rspec_junit_formatter が見つからない
cannot load such file -- rspec_junit_formatter
# Gemfile group :test do gem "rspec" gem "rspec_junit_formatter" end
$ bundle install
SSHで踏み台経由のログインができない
こちらを参考に対応する。procycommandに踏み台へのアクセス情報どうやって書くんだろうと思っていたけど configファイルをDcokerに持たせるという方法があったか。