【问题标题】:upgraded to Rails 4.2.6: rake db:migrate inserting column limits into schema.rb升级到 Rails 4.2.6:rake db:migrate 将列限制插入 schema.rb
【发布时间】:2016-07-30 18:10:20
【问题描述】:

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

我需要想办法避免这种情况发生。

任何时候我们添加迁移,我们最终都不得不做一个极其复杂和乏味的git add -p db/schema.rb,随着时间的推移,我对我们的 db/schema.rb 文件与任何版本的现实。

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

【问题讨论】:

    标签: ruby-on-rails rails-migrations ruby-on-rails-4.2


    【解决方案1】:

    根据Rails 4.2 Release Notes中的这个注释:

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

    并将此评论发给相关Rails Pull Request 14579

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

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

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

    【讨论】:

    • 好的,谢谢您的回答。我将重新检查我的断言,即在当前数据库中,字段的限制是 8,然后在新生成的 schema.rb 中它现在是 4。我敢打赌我只是忽略了那里的一些东西。
    猜你喜欢
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 2016-11-19
    • 2020-11-05
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多