とーますメモ

Ruby on Rails / Goなどの学習メモ

【CircleCI2.0 ✕ Rails】database.ymlはpushしたくないけど、CircleCIを使うにはpushしないといけない問題

自社の開発では、database.ymlは
.gitignoreに追加し、リポジトリにpushしない方針にしている。

そしてチームメンバーは各々のユーザ名やパスワードを
database.ymlに設定し、各環境のDBを使用する。
※チームメンバーの開発環境(VM)が全て同じものであるならば不要だと思う。

しかし、CircleCIを使用する場合、
database.ymlをpushしないとCircleCI上でDB設定ができないっぽいので
pushしないといけない。

そんなとき、便利なのが
「config」っていうgem。

設定は以下のページを参考にする。
qiita.com

settings.local.ymlにはローカル環境の設定を書いておき、
settings.ymlにはCircleCI用の設定を書いておく。

※settings.local.ymlはコマンドで自動作成されたときに
自動的に.gitignoreに設定されるので、pushしてもgitHubには転送されない。

そして以下のように設定すれば、公開したくない情報を公開せず
database.ymlをpushできる。

settings.local.yml

db:
  username: 'dev_user'
  password: 'dev_password'


settings.yml

db:
  username: 'root'
  password: ''


database.yml

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password:
  socket: /tmp/mysql.sock

test:
  <<: *default
  password: <%= ENV['DB_PASSWORD'] || Settings[:db][:password] %>
  host: <%= ENV['DB_HOST'] || 'localhost' %>
  database: dummy_test


config.yml

...
     docker:
        - image: circleci/ruby:2.4.1-node-browsers
          environment:
            RAILS_ENV: test
            DB_HOST: 127.0.0.1
            DB_PASSWORD: ''

        - image: circleci/mysql:5.7
        ...

かなり回りくどいが現在はこの設定で対応している。
もっと他によりやり方が、あるようだったら是非教えて頂きたい。。