この記事について
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環境と同じでも良いかと思う。
jobs:
build:
docker:
- image: circleci/ruby:2.6.5
environment:
RAILS_ENV: test
RAILS_MASTER_KEY: b4d624125c4cb11b2391cf0015cdxxxx
タイムゾーンが異なってテストが通らない
対応
環境変数 TZ
をセット。ディストリビューションによってはTZは使えないこともあるらしい
Dockerコンテナのタイムゾーン変更方法 - Qiita
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
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
を受け取るようにする
default: &default
adapter: mysql2
encoding: utf8mb4
host: <%= ENV['DB_HOST'] %>
環境変数にした場合は DB_HOST
を config.yml
ででセットする
jobs:
build:
docker:
- image: circleci/ruby:2.6.5
environment:
RAILS_ENV: test
DB_HOST: "127.0.0.1"
cannot load such file -- rspec_junit_formatter
group :test do
gem "rspec"
gem "rspec_junit_formatter"
end
$ bundle install
SSHで踏み台経由のログインができない
こちらを参考に対応する。procycommandに踏み台へのアクセス情報どうやって書くんだろうと思っていたけど
configファイルをDcokerに持たせるという方法があったか。
kojirooooocks.hatenablog.com
参考