2011-07-10 148 views
0

db遷移的概念對我來說是新的,但它同時很棒。 :)Rails:重構遷移

我很好奇正確使用遷移,因爲我需要知道如何通過遷移正確添加/刪除/修改表中的列。在過去,我一直通過gui直接編輯數據庫。 :/

什麼是添加新列的最佳方式?我嘗試過使用rails g migration :new_col => :attributes,但是如果我要創建/刪除/擺弄許多列,這看起來像是一件混亂的事情。

我最大的擔心,現在是學習如何與現場數據庫做到這一點 - 我不能到處去hazardously編輯實時數據庫,但我需要能夠添加,說新user_profile領域和諸如此類的東西。

我有興趣首先聽到有關這方面的最佳方法,其次是您的建議和過去的經驗。

謝謝,SO社區基本上給我一個準教育。

回答

1

當應用多個數據庫更改時,可以在遷移文件內將它們分離到多個命令中。如果一個操作需要計算,您也可以將Ruby代碼嵌入到這些方法中,就像您在任何其他Ruby類中工作一樣。你也可以執行SQL的ActiveRecord之外做數據庫的具體操作,或過於複雜的操作,一個ORM有效管理:

更多關於遷移方法的信息可以在這裏找到: http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

至於做在實時環境中,我會首先在一個臨時環境中測試您的遷移,這個遷移環境是您的實時環境的鏡像。如果登臺成功,我會在運行生產中的任何遷移之前備份實時數據庫。

警告一句話,如果遷移中途失敗,您可能很容易陷入半應用狀態,其中rake db:migrate:down也會失敗。這些操作可能需要了解DDL語法(或生成此DDL的GUI程序)才能解決。這就是爲什麼在生產中應用遷移之前,良好的階段性幹運行很重要。

+0

事務過於依賴數據庫的特定處理,不應該用來替代良好的部署實踐。瞥一看http://stackoverflow.com/questions/1108749/limits-on-postgresql-schema-changes-inside-transactions,似乎並非所有的DDL操作都可以在一個事務中執行。然而,一個有用的提示我將開始將所有我的遷移包裝在交易塊中! –