2015-05-22 253 views
2

之間的失同步遷移我想知道什麼是與開發環境投入生產環境背在同步的最佳方式。在正常情況下,當遷移工作時,放棄開發數據庫並不是什麼大不了的事情,並且根據您擁有的遷移來重新創建它。然而,它經常發生遷移被破壞(我的意思是SQL語句非常非常混亂),修復它們需要比從零開始(刪除數據庫和遷移)的所有操作都要多得多。開發和生產環境

這種情況真的讓我爲難,因爲我不知道如何把開發環境恢復同步的生產環境。

方案

數據庫/代碼[模型版本]


日1

發展

數據庫1 |代碼1 |遷移1

生產

數據庫1 |代碼1 |遷移1


日2

發展

數據庫4 |代碼4 |遷移1 < - > 2 < - > 3 < - > 4

生產

數據庫1 |代碼1 |遷移1

然後不管什麼原因,你做了很多的變化,並從4遷移到例如10產生一個真正搞砸移民類,以便避免花費1一天,在這你從頭開始。因此:


日發展

數據庫10 |代碼10 |遷移1(從零開始)

生產

數據庫1 |代碼1 |遷移1


1)如何將你的項目發佈到生產環境?如果你這樣做,我不知道會發生什麼,但我想異常頁面會很快顯示出來。所以我的第一個問題是管理這種情況的最佳方式是什麼?

2)給我在開發環境中,你應該能夠經常重新創建數據庫,以避免浪費時間。你認爲把移民班當作一等公民,考慮花1天時間修好移民班不是「失去時間」是一種更好的方法嗎?3)如果回答1)概括說明在生產環境和開發環境之間同步回遷並不像看起來那麼痛苦,但我有一種感覺,即對於只翻轉而不回滾的團隊來說,獲取幾周後襬脫舊的遷移班是好的。你在這裏看到一個陷阱嗎?

我認爲在部署過程中很有信心是關鍵,現在很好,我只有一些生產數據,我可以手動重新插入,以防我真的需要從頭開始,但我不想在每一次部署都很痛苦(大量遷移腳本需要大量修正)或者壓力大的情況。

回答

1

我將撤消遷移使用 Update-Database -TargetMigration回到應用遷移之前,我不想要的狀態。 More info here

回滾後,只需從Migrations文件夾中刪除遷移即可。它會像它從來沒有存在過。

因此,要回到生產上的方式,只需使用-TargetMigration即可對當前在Production上運行的遷移進行刪除,然後刪除後面的所有遷移並重新開始。

下一次你做一個Add-Migration它會重新支配你的變化。

+0

感謝您的回答,這裏的問題是,當您「從頭開始」時,無法使用-TargetMigration,因爲您的開發計算機上不再存在遷移。 – reddy

+0

所以不要「從頭開始」,除非你真的想這樣做 - 例如刪除數據庫,刪除文件夾中的所有遷移。如果你真的想「從頭開始」,那麼你將如何將其部署到生產中有更大的影響。如果有一個生產數據庫在使用,那麼這是關於維護,而不是從頭開始? – bgs264

+0

對不起,如果我錯過了這一點,讓我知道,我會刪除我的答案,所以它顯示再次沒有答案。 – bgs264