Ridgepole
こちらです。
データベースの構造の履歴を取る
Ridgepole はマイグレーションツールとしての側面が強いですが、データベースのスキーマを取得するツールとしても便利です。
実行時のオプションに --export
をつけるだけで指定したデータベースのスキーマを瞬時に書き出してくれます。
この機能を用いて、データベースのスキーマの履歴を取得しようとしました。
流れ
流れは単純です。
1. スキーマを出力できるように設定ファイルを書く
データベースへの接続設定を書きます。
ドキュメントでは YAML に設定を書く例が載っていますが、ユーザ名やパスワードを隠したいために、以下ではハードコーディングをしています。そのため、冒頭で dotenv
と yaml
を require しています。
dotenv についてはこちらのドキュメント などを参照してください。
require 'dotenv/load' require 'yaml' database = { adapter: 'mysql2', host: '123.123.123.123', database: 'your_database', username: ENV['DB_USERNAME'], password: ENV['DB_PASSWORD'], }.to_yaml command = "ridgepole -c '#{database}' --export -o Schemafile" `#{command}`
2. cron で回す
あとは「1.」のコードを cron で回します。whenever
を使うと楽です。
3. cron で実行する内容に git commit を入れる
「2.」で cron を実行してスキーマファイルを取得するわけですが、取得後に git add
git commit
git push
するコードも入れておきます。
こうすることで変更があった場合に自動で push されます。
当然ですが、いつも同じディレクトリで実行してスキーマファイルを上書きする形にならないと正常に差分が取れないので注意です。