2013-01-15 72 views
1

在我無盡的愚蠢中,我使用mysql更改了mysql數據庫而不是遷移,因此現在db與遷移不同步。從更改分區重新創建schema.db

我的問題是,如果可以生成缺少的遷移(步驟)和新的schema.db而不丟失數據和db中的更改*

*更改如添加表格,列。

THX

回答

1

至於重建的遷移,你的運氣,但如果你走這條路線,你可以重新創建模式

rake db:schema:dump 

,創建一個新的數據庫(當新環境等等),你會想做

RAILS_ENV=some_env rake db:schema:load # specify the env if not development 

,而不是

rake db:migrate 

由於您的遷移不符合當前模式。

運行schema:load時要小心,因爲它會重新創建數據庫。即您將失去所有數據。

+0

謝謝,它現在適用於我.. – user1980779

0

這將是很好的創建缺失的遷移。您可以通過手動將時間戳添加到schema_migrations表來修復您的本地開發數據庫。這是手動更改架構的結果。

還要確保rake db:migrate:reset(刪除所有表並從頭開始遷移)將產生與rake db:schema:dump相同的db/schema.rb。數據庫模式中的任何更改都必須通過遷移自動進行。

db:schema:load的問題是它會強制創建表。

+0

是的,但這會導致表數據的完全丟失,對不對? – user1980779

+0

是的,它只會從頭開始創建表格,但不會創建數據。所以另一種方法是首先將數據導出到某個地方,然後重置,以便稍後再次加載它。 –