所有執行的遷移都保存在表schema_migrations
(遷移時間戳保存在數據庫中)。當您運行rake db:migrate
Rails解析目錄db/migrate
並查找表中未顯示的文件(它通過時間戳進行比較)。
讓我們你有你在分支大師10遷移 - schema_migrations
有10個記錄與時間戳。您從主branch_1
創建一個新分支,創建並運行一個新的遷移。您的表格schema_migrations
有11條記錄。
您回到主頁並運行rake db:migrate
- Rails不會執行任何操作,因爲找不到任何新文件(位於db/migrate
)。當你運行rake db:rollback STEP=5
我想(我從來沒有檢查過)Rails從分支MASTER回滾5個最後的遷移。這是合乎邏輯的,因爲最後的遷移(在branch_1
中創建)在分支主機中不存在(代碼文件僅存在於分支1中!)。因此,您無法從分支主機中回滾branch_1中進行的數據庫更改。
什麼todo ?!我看到幾種策略:
1)簽出到branch_1
並運行rake db:rollback STEP=N
(N> =新遷移的計數)(您可以回滾更多的遷移,然後您在此分支中執行)。退回到master
並運行rake db:migrate
(執行從主設備遷移)
2)當你有生產轉儲或良好的種子。 掛斷當前數據庫,負載突降(或種子),運行rake db:migrate
(對於我來說,這是當你有生產轉儲最簡單的辦法!)
PS也許SMBD其他建議等方式來獲得正確的DB在當前分支