Skip to content

DBのデータをmigrateする方法

Masaki Komagata edited this page Nov 22, 2020 · 1 revision

背景

DBのスキーマ(データ構造)を変更するのにはrailsデフォルトのmigrationを使いますが、データについては開発環境と既存の本番環境では内容が違うのでmigrationに含めることはできません。実際のプロジェクトにおいては本番環境でだけこのように実行したいデータ操作が出てくることがたくさんあります。

articleテーブルにpublished_atカラムを追加する実装をしたが、既存レコードは全てnullなのでupdated_atと同じ値を入れておきたい。(published_atがnullだとエラーが出る)

これまでのやり方

一般的には、まずpublished_atにデータをいれるrake taskだけを含むPRを作ってデプロイし、手動でそのrake taskを実行した上でpublished_atを使った実装を作りデプロイする。

これまでのやり方の問題点

  • rake taskを本番で手動で実行する必要があるので面倒。(Cloud Runの場合はそのためだけにCloud Buildを使ってTriggerを作る必要がある)
  • 実装のPRをデプロイする前に必ずrake taskを実行しないといけない。それを忘れやすい。デプロイする人と実装する人は別の人の場合が多いので忘れやすい。
  • 実装のPRとrake taskのPRを分ける必要がある。別々になっているとわかりづらい。

新しいやり方

data-migrate gemを使っているので、既存のデータを変更したい場合はrake taskを作らずにこれを使ってください。これまでの問題点を解決しています。

デプロイ時にrake db:migrate:with_dataを実行するようになっています。

実装方法の詳細はdata-migrateのREADMEを参照ください。

Clone this wiki locally