2016-03-28 23 views

回答

1

雖然json列的行爲非常像序列化列,但請記住,某些情況下json列不能用於替換(例如,使用某些擴展名(如ActiveAdmin))。因此,我建議保留原始列,並以不同名稱非破壞性地將數據複製到新的JSON列。確保您可以安全地遷移數據,同時還原潛在的問題。

這一過程將是這個樣子:

  1. 創建遷移添加新的JSON列。 提交與git
  2. 寫rake任務通過每個記錄(可能使用find_each),並從現有的序列化列副本數據,每條記錄的新創建的JSON列進行迭代。 承諾git
  3. 將代碼中的引用替換爲引用新列的原始序列化列。 提交到廣泛的git
  4. 運行測試,優選與現有的數據臨時服務器上對生產

  • 備份數據庫和運行Rake任務我突出「承諾的git」步驟,尤其是在步驟3,因爲它可以讓你輕鬆隔離/平分/恢復任何潛在的錯誤。此外,如果這是一個真正的重構,應用程序的外部行爲不應僅僅因爲您使用JSON列與序列化列而更改,因此您可以恢復步驟3 &重新運行測試以更好地驗證此問題並隔離錯誤/更改。如果出現問題,您將能夠回到您所在的位置,因爲第2步是非破壞性的。

    爲了消除停機時間,你會明顯地要運行的遷移,並通過rake任務中的數據複製部署步驟代碼變更前3

    最後,當你自信的完整性您您可以刪除原始序列化列的數據,以便將JSON列重命名爲列的原始名稱。

  • +0

    謝謝你清楚,想出答案 – stevo999999

    +0

    沒問題,祝你好運! –

    +0

    如果它適合你,你會介意接受答案嗎? –

    相關問題