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

时间:2016-07-30 18:10:21

标签: 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将被重建,并且具有极其庞大的差异。

1 个答案:

答案 0 :(得分:5)

根据Rails 4.2 Release Notes中的这个说明:

  

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

对相关Rails Pull Request 14579的评论:

  

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

问题不是新的默认问题,而是旧问题的反映。

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