限制:schema.rb 布尔字段有 1 个差异

limit: 1 difference in schema.rb boolean fields

我最近开始注意到,在部署到生产环境之后,我在我的 db/schema.rb 中看到这个 git 差异:

-    t.boolean  "published",          limit: 1
+    t.boolean  "published"

-    t.boolean  "visible",            limit: 1,                    default: false
+    t.boolean  "visible",                                         default: false

鉴于 Rails 版本在两个环境中是相同的,这是否只是由于 MySQL 版本之间的差异造成的,分别是生产版 5.5.43 和开发版 5.6.23?

你的Rails版本有变化吗? Rails 最近发生的变化可以解释这一点:https://github.com/rails/rails/pull/19066

基本上,由于 MySQL 没有布尔列类型,Rails 使用 TINYINT(1) 列类型作为 :boolean 属性,这反映在架构时被转储到 schema.rb。到目前为止,一切都很好。但是,如果有人试图将相同的 schema.rb 加载到 PostgreSQL 中,它将失败,因为 Postgres 确实 具有 BOOLEAN 列类型,但声明了 [=14] 的长度=] 列是非法的。当从 MySQL 数据库中转储 :boolean 属性时,通过删除 limit: 1 选项修复了此错误(无论如何都没有必要)。

因此,如果上次转储您的架构(发生在您 运行 迁移时),您使用的是 Rails 4.2.2 或更早版本,您将在 schema.rb,如果您随后升级到 4.2.3 并再次转储您的架构,limit: 1 将会消失。

除了修复上述错误外,此更改没有任何效果 — 您的 schema.rb 将以与以前完全相同的方式运行 — 因此无需担心。