我是編程新手。我在生產中使用Rails 4和Postgres作爲數據庫。當我更改數據庫結構時,使用Capistrano進行部署時更新生產數據庫的最佳做法是什麼?我想保留生產中的所有數據。更新生產數據庫的最佳實踐?
我注意到有時當我更改模式並部署到生產環境時,現有的一些數據記錄丟失了。
我是編程新手。我在生產中使用Rails 4和Postgres作爲數據庫。當我更改數據庫結構時,使用Capistrano進行部署時更新生產數據庫的最佳做法是什麼?我想保留生產中的所有數據。更新生產數據庫的最佳實踐?
我注意到有時當我更改模式並部署到生產環境時,現有的一些數據記錄丟失了。
通常你」將使用rails g migration
產生新的遷移,然後做這樣的事情:
class AddUsersDiscountToken < ActiveRecord::Migration
def change
add_column :users, :discount_token, :string
end
end
這種遷移會discount_token
列添加到users
表可應用於:
rake db:migrate
在Capistrano的還有一旦部署成功,將做到這對你的任務。除了介紹這個新領域之外,不應丟失任何數據,也不會改變記錄。如果發生其他事情,你的遷移中會出現一些非常奇怪的事情。
記住,一些規則:
mysqldump
是一個很好的開始。複製二進制MySQL數據文件是不夠的,如果可以的話,將無法可靠地工作。這就是爲什麼使用臨時服務器通常很方便,即使它只是臨時服務器,或者不如生產服務器強大。它允許您在實際生產數據上測試遷移,而不會中斷服務。使用新遷移的生產數據庫運行新的生產代碼,並驗證已添加的新功能是否正常運行,並檢查是否沒有破壞任何舊迴歸的代碼。請記住,改變大型表(例如具有數百萬行的表)的模式的遷移可能需要一些時間才能完成,特別是在具有非SSD支持的數據庫的服務器上。在分級系統上進行測試時,請記下完成所需的時間,因爲您可能需要提前通知您的用戶進行定期維護,或對計劃進行更改,以減少遷移方面的干擾。
除非您刪除表格或刪除列migrations
永遠不會導致您的任何問題。
爲了避免某些遷移相關的問題請確保您有以下這一點:
table
或column
不是刪除和創建具有相同結構的表。reversible
以防您需要回滾counter-script
。在執行之前閱讀提議的遷移。然後在登臺服務器上執行它並查看它做了什麼,驗證結果。然後才考慮生產。 –
@CraigRinger這是一個很好的觀點 –
第一步:根本不要這樣做,直到您有連續的備份和存檔。 –