2012-10-26 12 views
7

次のプロジェクトでRuby on Railsを使用することを検討しています。レールのウェブサイトの展開を理解するのは簡単です(Phusion Passengerのように聞こえます)Gerritを使ったRuby on Railsデータベースの展開

しかし、今私はデータベースを把握しようとしています。私はルビーコードを使用してデータベースを更新することができます "データベースの移行"について多くを参照してください。 updownこれらの移行の亜種を作成することが許可されていることもわかります。

しかし、私はこれがどのようにして単一の方向にきちんと動作するかを見極めることができます。突然私が「カラー列はヌルにすることはできません」と言うと想像してください。したがって、を入力してを入力すると、すべてのNULLエントリにデフォルト値が設定されます。しかし、になるのでしょうか?それが始まった方法と同じであれば、デフォルト値をNULLに戻すことはできません。

これは、リリースの生産にはあまり関係ありません。それは単方向(up方向)で行われる可能性があります。 しかし、コードレビューにGerritを使用し、チェックインを許可する前にビルドを実行するボットを設定したいと思っています。

どのように機能するのですか?あるコードレビューから次のコードレビューまで、ビルドサーバーは新しいコードセットをチェックアウトし、移行を実行しますか?しかし、これが起こると、以前から移行コードを保持していないので、ステップをどのようにしてステップ実行できますか?もっと簡単な例として、コードの古いバージョンをチェックアウトして "db migrate"を逆戻りする方法がわかりません。

答えて

3

はい、旧バージョンのコードをチェックアウトしてから、新しいバージョンのコードから下位移行を実行することはできません。古いコードにロールバックする前に、ダウンマイグレーションを実行する必要があります。

ダウンマイグレーションが実用的でないか可能性が高いケースがたくさんあります。それは必ずしも悪いことではありません。つまり、データベースを以前の状態に戻すことができなくなる「無償のポイント」を定義したことになります。

テーブルの作成や列の追加などの移行は、そのテーブルを破棄したり、その列を削除したりするだけで簡単に元に戻すことができます。あなたは、このようなデフォルト値を追加したり、周囲にデータを移動するなど、より複雑な何かをやっている場合は、あなたは、この移行を逆にすることができませんRailsのを伝えることができます:

def down 
    raise ActiveRecord::IrreversibleMigration 
end 

私はヘリットは何も想定してはならないことをお勧めしますデータベースについて新しいバージョンがデプロイされるたびに新しいデータベースから開始し、すべての移行を実行するにはdb:migrateを実行する必要があります。 factory_girlのような宝石を使って、テスト目的でデモデータをアプリに入力することができます。

+0

受け入れられる回答。ビルドで何らかの方法で移行をテストする必要があるので、私が使用する正確な戦略についてはまだ分かりません。ビルドの前にリストアされたDBスナップショットを作成し、マイグレーションを実行してみましょう。 –

関連する問題