1. ホーム
  2. ruby-on-rails

[解決済み] rake db:schema:load vs. migrations(マイグレーション

2022-04-20 13:41:16

質問

アプリが複雑になるにつれ、マイグレーションが遅くなり、面倒になるのでは? rake db:schema:load を呼び出すことができるのに、なぜマイグレーションが存在するのでしょうか?

上記の答えが、マイグレーションはバージョン管理(データベースへの段階的な変更記録)のために使われるということであれば、アプリがより複雑になるにつれ、そして rake db:schema:load は、その主要な機能を維持し続けるのでしょうか?


注意

この質問の回答から rake db:schema:load はデータを削除します を使用する場合は注意が必要です。

解決方法は?

マイグレーションは、データベースに対して前方および後方ステップの変更を提供します。本番環境では、デプロイ中にデータベースの増分変更を行う必要があります。マイグレーションは、ロールバックフェイルセーフとともにこの機能を提供します。もしあなたが rake db:schema:load を本番サーバーで使用すると、本番データをすべて削除してしまうことになります。これは危険な習慣です。

とはいえ、時折マイグレーションを "collapse"することは、適切なプラクティスであると思います。これは、古いマイグレーションを削除し、単一のマイグレーションに置き換えることを意味します。 schema.rb ファイル)を更新し schema_migrations テーブルで、この変更を反映させることができます。 この作業を行う際には、十分な注意が必要です! 気をつけないと、簡単に本番データを消してしまうことになります。

余談ですが、マイグレーションファイルには絶対にデータ作成を入れてはいけないと強く思っています。その seed.rb ファイルを使用するか、カスタム rake または deploy タスクを使用することができます。マイグレーションファイルにこれを入れると、データベーススキーマの指定とデータの指定が混在し、マイグレーションファイルを実行する際にコンフリクトが発生する可能性があります。