db:resetをすべてのマイグレーションと異なるのはなぜですか?

Ruby on Railsガイドのセクション Railsデータベースの移行には、次のような行があります

db:resetタスクはデータベースを削除し、再作成して現在のデータをロードします   スキーマを作成します。これはすべての移行を実行するのと同じではありません。

誰が正確に彼らが異なっているのか、なぜマイグレーション履歴を再生するのがエラーが起こりやすいのか教えていただけますか?

Ruby on Railsについてはかなり新しいです。前もって感謝します。

1

2 答え

スキーマファイルには、データベースの現在の構造が含まれています。ロードすると、ファイル内にある正確なスキーマをdb内に持つことが保証されます。移行は、データベースを段階的に変更するように設計されています。表を追加してから列を追加し、3つの別々の移行で表を削除することもできます。スキーマが既にテーブルが存在しなくなったことを既に知っている場合、これをすべて実行する必要はありません。

彼らがエラーを起こしやすい理由については、私は完全にはわかりません。私が考えることの1つは、移行だけではなくデータに変更を加えることができるということです。

0
追加された
助けてくれてありがとう。
追加された 著者 user898871,

rake db:reset を実行すると、データベースの構造が schema.db から再構築され、基本的には移行されたデータベース構造のキャッシュバージョンとして機能します。一方、すべてのマイグレーションを実行すると、マイグレーションが1つずつ適用されます。データベースの変更(たとえば、追加されたカウンター・キャッシュ列の事前入力)に対応する任意のコードが含まれます。

移行履歴を再現するのは、データベースの構造とデータの両方に変更が加えられているため、エラーが発生しやすくなります。 開発者が気をつけていない場合、新鮮な環境(例えば、マイグレーションは古いバージョンのモデルを前提としている)にきれいに適用されないことがあります。一方、移行した後に移行を編集すると、 schema.db が同期しなくなる可能性があります(開発中の移行の爆発を避けるための便利なトリック)。その場合は、 rake db:migrate:reset を実行する必要があります。

0
追加された
助けてくれてありがとう。
追加された 著者 user898871,