ちょっと奇妙な質問だと思います。すぐ下で問題を説明し、興味のある人のために、ここにたどり着いた経緯を説明する背景を説明します
問題:
私のスキーマは、移行の結果として、同じ列を削除および追加したとマークされるような状態になっています。つまり、schema.rb を比較すると、次のようになります。
- t.integer "cut_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "animal_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "animal_id"
+ t.integer "cut_id"
問題は、これによって列が追加/削除されるわけではありませんが、このコードを本番環境にプッシュして移行を実行すると、実際に列が削除されなくても、基本的に既存のデータが消去されることです。
これは事実ですか?DB が文字通り 4 つの列を削除してから追加するのか、それとも変更がないことを認識しているのか、誰にもわかりませんか? それらを削除する場合、これを修正し、削除する前にデータを保存して再挿入する方法を誰かが考えられますか? データの消去とその置き換えの間のタイムラグは気にしません。
ここにたどり着いた方法:
基本的に、私は急いでばかなので、必要なすべてのデータを新しいテーブルに移行するために必要ないくつかの列を消去したことに気付く前に、多くの移行を含むローカルで大量の変更を加えました。
幸いなことに、これはローカルにありました。残念ながら、作業を破棄するために git reset HEAD^ を実行しましたが、移行が消えたにもかかわらず、スキーマは問題のある移行後の状態のままで、リセットなどはできませんでした。そのため、古い移行を回復してロールバックしようとするこのプロセス全体を実行し、半分は成功しました。次に、他の移行を記述して、半ロールバックした変更を完全にロールバックしました。
このたった1つの問題の結果として、巨大な混乱。結局、それは問題ではなく、簡単に展開/スリープできる可能性はありますか?