( ꒪⌓꒪) ゆるよろ日記

( ゚∀゚)o彡°オパーイ!オパーイ! ( ;゚皿゚)ノシΣ フィンギィィーーッ!!!

Railsで今いるブランチによってデータベースを切り替える

ブランチングモデルとしてgit-flowを使っていて、メインラインとして、本番適用中のmasterブランチと、次期リリース用のrelease/9999ブランチと、メイン開発ブランチのdevelopがある。


ところが、開発中は頻繁にブランチを移動するし、ブランチによってDBのスキーマが異なるなんてザラにあるし、ブランチ切り替える度にconfig/database.ymlを書き換えるのもタルいので、こんな風に書いた。

development:
  adapter: postgresql
  database: my_app_<%=
    case `git symbolic-ref --short HEAD`
      when 'master'  then 'master'
      when 'develop' then 'develop'
      when /release\/.*/ then 'release'
      when /hotfix\/.*/  then 'master'
      when /feature\/.*/ then 'develop'
      else 'develop'
    end
  %>
 
  username: yuroyoro
  password: yuroyoro
  host: localhost
  encoding: utf8

これで、masterブランチにいるときはmy_app_masterというDBを使い、release/9999ブランチの時はmy_app_releaseってDBを使うようになる。migrationが入り乱れたり、アプリケーションとスキーマが合わないので500るとかなくなって凄惨性あがる.