2016-08-15 66 views
0

我最近看了一下我的schema.rb文件,驚慌地發現我的數據庫中確實存在的某些列沒有出現,並且有些表完全丟失。缺少的列通過「def change add_column」遷移添加到數據庫,儘管以這種方式添加的某些列在schema.rb中按預期顯示。爲什麼不更新我的schema.rb文件?

經過仔細檢查,我意識到schema.rb自創建Users表以來並未更新。

20151019205241_create_users.rb:

class CreateUsers < ActiveRecord::Migration 
    def change 
    create_table :users do |t| 
     t.string :name 
     t.string :email 
     t.timestamps null: false 
    end 
    end 
end 

在實踐中,這並沒有引起我的問​​題,但我認爲schema.rb本來應該自動保持更新,這將是非常重要的是已將其更新以重新創建數據庫。任何人都可以幫我弄清楚爲什麼它不會更新?

一種可能性是,當我將數據庫從sqlite3切換到postgresql時,它停止更新。我不記得確切,但我認爲時機是有道理的。

+0

不知道如何切換數據庫干擾'schema.rb'。當您現在執行'rake db:migrate'時,文件是否得到正確更新? (您無需爲此Rake任務添加任何新遷移即可成功運行。) – Raffael

+0

它沒有。下次我以某種方式更新數據庫時,我會對此進行測試。現在@ smefju下面的解決方案工作。感謝您的回覆!你是對的,它似乎與切換數據庫沒有任何關係。 –

回答

2

您可以使用rake db:schema:dump從當前數據庫結構重新創建文件。

模式文件獨立於驅動程序,因此從sqlite3遷移到PostgreSQL應該沒有關係。確保文件中定義的version不大於當前當前日期。您也可以將整個文件添加到問題的片段中。

+0

謝謝,這個修好了! –