2011-08-17 45 views
0

在我想知道,以確保self.down實際上回滾self.up之前運行遷移問題的最佳途徑。換句話說。在運行之前是否有一種簡單的方法來測試遷移?

如果我需要回滾遷移,但我能做些什麼但self.down不符合目的?

處理潛在的破壞性遷移時,哪種方法是最佳做法? 只是一個數據庫備份?

謝謝, Duccio。

+1

在生產環境中運行遷移時,您應該始終保持備份,這只是一個很好的做法,因爲您永遠不知道可能會出現什麼問題,如果在運行遷移過程中電源中斷,會發生什麼情況?寧可安全,也不要抱歉。 – jonnii

回答

3

您應該開發一個不應包含實時數據的開發數據庫。因此,數據是否被破壞並不重要,因爲您可以輕鬆再次生成數據?

如果您發現自己處於開發數據很重要但不理想的情況,則可能需要進行數據庫備份。

+0

是的,我正在開發環境中開發。在目前的任務中,我的開發數據非常重要,因爲我需要它來了解** self.down **是否能夠完成工作。事實是:如果我在沒有做過數據庫備份的情況下運行** self.up **,而不是_wrong_ ** self.down **,那麼修復和測試self.down會比較困難,因爲初始狀態(錯誤回滾之前的數據庫)將被更改。所以我猜在這種情況下值得做一個數據庫備份......但我認爲理想的情況是讓腳本生成的虛擬數據輕鬆恢復以前的狀態。 – Darme

1

通常,遷移應只包含模式更改。在這種情況下,它應該非常安全,易於在開發/測試環境中運行遷移。如果出現問題,您可以重新創建數據庫並用一些測試數據填充它。但是如果你有一些數據相關的遷移需要測試,那麼當你在生產中實際運行它們時可能會出錯。

在那種情況下,正如你所提到的,數據庫備份是你應該依賴的。在部署前請提供適當的&快速恢復機制。

0

要確保遷移的行爲符合您的要求,您應該在開發環境中進行試驗。

運行命令

rake -T 

向您展示可用的任務,如

rake db:migrate 

rake db:rollback 
0

每個移民事務內部運行。記住這一點。這意味着,如果在單個遷移中出現問題,則遷移將回滾(如果有任何後續操作,則不會執行遷移)。

要測試遷移,不管是up還是down我插入了很多puts語句,以檢查所有工作已經應該,然後在我的最後一行我引發一個異常。這會讓Rails認爲遷移失敗,並且會回滾操作(就好像它從未發生過)。

當我確定所有東西都能正常工作時,我刪除了提升線並讓遷移真正起作用。 在你的情況下,你會測試加註,刪除加註,不再運行它,我假設:)

希望這會有所幫助。

相關問題