migration 檔的執行 / rollback / 其他動作

Posted by Anthony Chao on 2019-09-27

執行 migration

當建好 migration 檔案之後,接著還需要執行才會把檔案中的改變做出來喔!

一般來說我們都單純的使用下面這指令來執行

1
rails db:migrate

這指令會把所有還沒執行過的 migration 檔案執行一次,另外同時隱藏著更新 db/schema.rb 這個檔案的指令

除此之外,我們還可以指定要更新到哪個版號

1
rails db:migrate VERSION=20190921120000

如果這個版本比我們目前的版號更後面,他會執行還沒執行過的檔案中的 change 跟 up 內容直到執行完這個 migration 檔為止,在這之後的檔案不執行

如果這個版本比較前面,會執行我們這版本跟這個檔案之間所有 down 的內容,但不包括這個檔案本身


Rollback migraion

有種狀況也非常常見,那就是我們執行完 migration 檔之後才發現內容有錯,這種情況該怎麼辦?

如果在你還沒推上去 github 之前,這個改變只存在你的本機端,這時候可以用下面這指令

1
rails db:rollback

他會回復上一個 migration 的內容(如果是 reversible 的話),這時候你就可以再去修改 migration 的內容然後再 migrate 一次,但如果你已經推上去 github 則最好不要輕易改 migration 的內容,很可能造成大家的困擾

除此之外我們還可以指定要 rollback 幾步

1
rails db:rollback STEP=3

Redo

另外,還可以用 redo 確認剛剛執行的 migration 檔案是否 reversible

1
rails db:migrate:redo

他會執行一次 rollback 之後再執行一次 migration


執行 migration 的環境

在某些特定情況下,我們會需要單純執行某個環境的 migration

1
rails db:migrate RAILS_ENV=test

上面這個例子會在測試環境下執行 rails db:migrate

以上這些就是常見的如何操作跟 migration 相關的動作喔!希望對某些初學者有幫助~

參考資料:

Rails Guide





prevent_hack