2016-07-30 56 views
5

我發現我們很多列在遷移中沒有limit: xxx突然被限制應用於列,而不是數據庫本身,但是在我們的db/schema.rb文件中。當我們只是在任何環境中進行遷移時,這並不可怕。它變得麻煩的地方是當我們建立新的數據庫時 - 它們不再符合我們在各種prod/staging/qa環境中所具有的功能。升級到Rails 4.2.6:rake db:遷移插入列限制到schema.rb

我需要找到一種方法,讓這種情況不會發生。

隨着時間的推移,我們添加了一個遷移,我們最終必須做一個極其複雜和繁瑣的工作git add -p db/schema.rb,隨着時間的推移,我失去了對db/schema.rb文件與任何現實版本匹配的信心。

作爲一個數據點,如果我運行rake db:migrate沒有新的遷移,db/schema.rb被重建並且有一個非常巨大的差異。

回答

5

根據本說明Rails 4.2 Release Notes

而PostgreSQL和SQLite適配器不再對字符串列增加爲255個字符的默認限制。

而且給相關Rails Pull Request 14579此評論:

的DB/schema.rb是用來精確地重新創建數據庫。所有的字符串列都是在4.2之前添加的,其隱式限制爲255.那時不需要將限制轉儲到db/schema.rb,因爲它是默認值。現在我們已將默認值更改爲無限制。我們必須轉儲這些限制來重新創建數據庫。

該問題不是新的默認值,而是舊的缺省的反映。

爲了解決這個問題,我建議運行一個遷移,從相關字段中刪除限制,然後從數據庫中重新創建schema.rb。這應該導致一個新的一致的狀態。

+0

好的,謝謝你的回答。我將重新檢查我的斷言,即在當前數據庫中,字段的限制是8,然後是新生成的schema.rb,現在是4.我打賭我只是忽略了某些內容。 – jaydel