0

現在、レガシー (Rails) アプリのデータ スキーマを新しい Rails アプリに再設計しています。私がしなければならないことは:

  • 1 移行 : 複数のテーブルに新しいフィールドを作成し、新しいフィールドを追加します
  • 1 Rake タスク: 従来のフィールド値を新しく作成されたテーブル フィールドにディスパッチします。
  • 1 移行 : 未使用のフィールドを削除し、いくつかのレガシー テーブルを削除します

実際には動作しますが、これら 2 つの移行 + rake タスクを 1 つのスクリプトに「混在」させることは可能ですか? 3つのスクリプトを1つずつ実行する以外に解決策はありませんか? (レーキ タスクのディスパッチには最大 10 分かかります)。

古いアプリから新しいアプリに移行して本番環境にデプロイするときは、コマンド ラインを 1 つだけ「撮影して忘れる」ことを本当に好みます。

4

3 に答える 3

0

つまり、3 つの個別の移行を行うことをお勧めします。

  • フィールドを追加
  • データの更新
  • ドロップ フィールド

2 番目のタスクは、必要な更新のみを行う「データのみ」の移行です。このタスクが成功/失敗に応じて正しい方法で終了することを確認する必要があります。これは、失敗/機能する場合に正しいことを行うために ActiveRecords Migrations フロー制御に依存するためです。

デプロイ中に実行する単一の rakedb:migrateコマンドが必要になりました

于 2013-09-06T07:25:13.710 に答える
0

最後に、必要に応じて生の SQL ステートメントを使用して、1 つの rake タスクを使用するだけです。

dropped_fields = "ALTER TABLE `locations` DROP `name`, DROP.....;"
ActiveRecord::Base.connection.execute(dropped_fields)
于 2013-09-06T07:07:13.357 に答える