升级到Rails 4.2.6:rake db:将插入列限制迁移到schema.rb中

jay*_*del 5 ruby-on-rails rails-migrations ruby-on-rails-4.2

我发现很多我们的列limit: xxx在迁移中没有突然限制应用于列,而不是数据库本身,而是在我们的db/schema.rb文件中.当我们在任何环境中进行迁移时,这并不可怕.它变得麻烦的地方是我们设置新数据库时 - 它们不再匹配我们在各种prod/staging/qa环境中的数据库.

我需要找到一种不会发生这种情况的方法.

随着时间的推移我们添加一个迁移,我们最终不得不做一个非常复杂和乏味的git add -p db/schema.rb事情,随着时间的推移,我失去了对我们的db/schema.rb文件与任何版本的现实相匹配的信心.

作为一个数据点,如果我在rake db:migrate没有新的迁移的情况下运行,db/schema.rb将被重建,并且具有极其庞大的差异.

Nic*_*lov 5

根据Rails 4.2发行说明中的这个说明:

PostgreSQL和SQLite适配器不再在字符串列上添加255个字符的默认限制.

以及对相关Rails Pull Request 14579的评论:

db/schema.rb用于精确重新创建数据库.所有字符串列都在4.2之前添加,隐式限制为255.此时没有必要将限制转储到db/schema.rb,因为它是默认值.现在我们已将默认值更改为无限制.我们必须转储这些限制才能重新创建数据库.

这个问题不是新的默认问题,而是旧问题的反映.

要解决此问题,我建议运行迁移,从相关字段中删除限制,然后schema.rb从数据库重新创建.这应该导致新的一致状态.