2013-04-11 73 views
0

我已經在我的生產服務器上的數據庫表中,我創建運行db:schema:load刪除現有表並創建新的?如果是,如何不刪除現有的表和數據?

RAILS_ENV=production rake db:schema:load 

現在我已經創造了一些更多的遷移和正在運行分貝:模式:再次負載,但它會因爲我放棄現有的表是在生產,我確實有數據呢?我可以在我的db/schema.rb文件中看到,我有

create_table「authentications」,:force => true do | t |

刪除和創建表格看起來是非常危險的,有沒有其他的方式來做到這一點?我正在使用postgresql

回答

1

是的,加載模式將刪除所有數據。你可以簡單地在你的模式中設置forcefalse,但是然後postgresql會給你一個錯誤,因爲表已經存在並且模式將不會被加載。

這個問題真的是你想要實現的。如果您有一些遷移,爲什麼不直接在生產環境中運行它們?

rake db:migrate RAILS_ENV=production 

如果真的是有沒有辦法解決這個和你的新的模式仍與舊的支持數據,我建議你轉儲數據,加載架構,然後再加載數據。爲此,您可以使用yaml_db

+0

謝謝@Charles,以及我已經看到了schema.db文件,它說你如果在不同的服務器上創建相同的表格,那麼你最好使用schema.db而不是db:migrate雖然我當然不能丟失數據。所以db:migrate只會創建那些沒有創建的表?如何只運行一個特定的遷移只是爲了更安全一方? – iCyborg 2013-04-11 12:52:17

+0

遷移就像數據庫結構的故事情節一樣,以反映不同狀態的數據庫在不同的開發狀態。他們不在那裏填充你的數據庫。如果你移動到另一臺服務器,你應該只加載模式,然後使用yaml_db之類的東西將數據從舊數據庫傳輸到新數據庫。 – weltschmerz 2013-04-11 13:18:24

+0

Right Charles,我的意思是說我在本地服務器上創建了2個遷移,現在我想在服務器上覆制它,我可以將遷移文件放在服務器上並運行db:migrate或者運行db:schema:load,因爲我讀取那db:migrate可能會破壞事情,你更喜歡哪種方法? – iCyborg 2013-04-12 06:04:13