關於自動部署後延伸的議題,若部署失敗後的 rollback 處理。
首先必須了解,我們需要 rollback 什麼
- 還原回舊的程式碼
- 還原資料庫
還原回舊的程式碼
- 以
capistrano
為例,每次透過工具執行 release 指令之後,在 releases 資料夾下,就會有當下時間戳記資料夾,工具會更新軟連結 (current) 指向的新的時間戳記的資料夾,以達到可以還原的目的。 cap staging deploy:rollback ROLLBACK_RELEASE=20160614133327
- capistranorb structure
資料庫rollback
- 資料庫層級的 rollback
- 使用一些 tool 所寫出來的 migrations script,自動將執行動作包在同一個 transaction,如果中間有一個步驟失敗,會直接做資料庫層級的 rollback。
- 框架層級的 rollback
- 但如果 migration script 執行完成後,結果不如預期,基本上不建議做資料庫的資料跟結構 rollback 的,就如何你 push 出的 code 一樣,你如果做 git rebase,將導致其他已經 pull 的人發生衝突,所以功能最好只使用在未 push code 出去之前使用。
- 例如若你在 migration script 中,新增了一個欄位,當你做
rake db:rollback STEP=1
後,它會自動將新增的欄位移除。
- 那到底怎麼收拾失敗的殘局?
- 答案就是在寫一個 migration script 去修正問題
完整範例程式
database migration tools
相關文章