3


2

これは、この質問に対する一種のフォローアップです。

私がブランチに取り組んでいるのであれば、それが再統合されてプロダクションにリリースされたときに、データベーススキーマをかなり劇的に変えるでしょう。 本番環境のすべてのデータを確実に新しい形式に変換するための最善の方法は何ですか?

簡単な例としては、テキストに変更してデータに変換作業を行いたい数値列があります。 それから古い列を削除したいです。

私は移行中にデータ操作をするのではなく、このためにすくいタスクを作成するように勧められました。 移行と並行してレーキタスクを確実に実行できるメカニズムはありますか?

今のところ、私が考えられる唯一の解決策は、存在しない列を2番目のコレクションにドロップするすべてのマイグレーションをまとめることです。 新しいテーブルを追加する最初の移行セットを実行します。 レーキタスクを実行してから、2番目のマイグレーションセットを実行します。 これは私にとって理想的な解決策ではないようで、簡単にはうまくいかない可能性があります。

1 Answer


2


移行はまさにこの種のもののためのものです。 スキーマを変更するかどうかにかかわらず、データベース内のデータを新しいバージョンのアプリケーション用に変換することは、移行の必要があります。 これは、新しいバージョンのアプリケーションが稼働する前に、プロダクションで新しい変更が行われることを保証するものです。

ブランチで作業しているときは、新しい移行を作成するだけで、新しいタイムスタンプ付きファイルが作成されます。 リリースブランチにマージすると、ファイルはそのままコピーされます。 タイムスタンプがあるため、マイグレーションは(おそらく)正しい順序で実行されます。

あなたがしている変換が、しかし、時々実行され続けるならば、あなたはRakeタスクを使うべきです。