2016-07-30 61 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