CI環境と開発環境でDBパスワードが異なる場合
CI上のパスワードは空でOK, 開発環境上はcredentialでパスワードを設定しています。
以前は開発環境だけで読み込めるようにgem 'dotenv-rails'
を使用してパスワードを設定し、Github上にはそのパスワード環境変数をpushしないことでCI上にはパスワードが空になるようにしていました。
酷い力技だったので、わかりやすいように修正しました。
jobs: build: docker: - image: circleci/ruby:2.7.2-node-browsers-legacy environment: - BUNDLER_VERSION: 2.1.4 - RAILS_ENV: 'test' - DB_HOST: 127.0.0.1 - LANG: 'ja_JP.UTF-8' - TZ: "Japan" - image: circleci/mysql:5.7 environment: - MYSQL_ALLOW_EMPTY_PASSWORD: 'true' # ここ - MYSQL_USER: root - MYSQL_DB: ci_test
# 略 test: <<: *default database: ci_test host: <%=ENV['DB_HOST'] || '127.0.0.1' %> password: <%= Rails.application.credentials.development[:password] %> ##ここ
対処法
database.yml.ci
を用意
# 略 test: <<: *default database: ci_test host: <%=ENV['DB_HOST'] || '127.0.0.1' %> password: "" #空にする
本来使用するdatabase.yml
からdatabase.yml.ci
を入れ替え
# DBのセットアップ - run: name: Database Setup command: | rm ./config/database.yml # ここ mv ./config/database.yml.ci ./config/database.yml # ここ bundle exec rake db:create bundle exec rake db:schema:load