1

私はRailsアプリを持っていますが、新しい開発者を参加させると、移行の履歴全体を実行することで、開発環境で現在のDBスキーマを作成できるはずだと時々言われます。個人的には、移行がスキーマの信頼できるソースであるとは思いません。現在行っているのは、現在のスキーマを含むDBの本番コピーを開発マシンにロードすることです。そして、そこから、増分移行を介してスキーマを維持できます。

だから私の質問は:

  • Railsプロジェクトのスキーマの信頼できるソースは何ですか?
  • DBスキーマを維持するためのベストプラクティスの方法と現在考えられているものは何ですか?
4

2 に答える 2

6

移行がスキーマの信頼できるソースであるとは考えていません。移行は非常に強力ですが、オプションです。一部の開発者は、特に DBA が強力な参照整合性と DBMS による制約を要求する環境で、別のワークフローを使用します。詳細については、移行に関する公式 RoR ガイドを参照することをお勧めします。(db/schema.dbまたはdb/{env}_structure.sql) ファイルは、スキーマの信頼できるソースです。多くの開発者は、プロジェクトが古くなるにつれて古い移行を削除するため、各移行を実行しても必ずしも作業データベースが生成されるとは限りません。また、何百もの移行を実行するには長い時間がかかります。Rails は schema.db (または sql ダンプ ファイル) を使用してテスト データベースを構築します。もちろん、実行時rake db:setupには、アプリケーション用の新しいデータベースを作成する方法として推奨されます。

一番下のようなものはrake db:setup、移行に関係なく、常に作業データベースを生成する必要があることです。開発者はこれを使用して新しい環境を作成でき、Rails はこれを使用してテストを実行できます。

http://guides.rubyonrails.org/migrations.html#schema-dumps-and-source-control

于 2011-02-14T15:22:26.537 に答える
1

通常、すべての移行を連続して実行すると、実際の DB スキーマが生成されます (そうでない場合は、移行を正しく使用していません*)。

もう 1 つの方法は、schema.rb (移行時に作成/更新される) をコピーすることです。これは、本番環境で使用されrake db:setupているスキーマの正確なコピーを生成する必要があります (繰り返しますが、移行を正しく使用しなかった場合を除きます)。 *))。

次に、「サンプル データ」が必要な場合は、モデルにアクセスできる ruby​​ コードを含む db/seeds.rb ファイルを使用して挿入し、新しいエンティティなどを作成して永続化できます...

*: データベースのすべての変更を「通常の」方法で移行に入れることができない場合があります (これは一般的ではなく、可能であれば回避する必要があります)...ただし、これらは移行に含める必要があります (プレーンな SQL 実行ステートメントで) )、または変更はdev DBでも手動で行う必要があります...そして、prodのスナップショットを使用します。の方が便利な場合もあります。しかし、繰り返しますが、そうすることはお勧めしません。

于 2011-02-14T15:11:47.727 に答える