limit:schema.rb布尔字段中的1个差异

时间:2015-08-14 12:05:08

标签: mysql ruby-on-rails git rails-migrations

我最近开始注意到在部署到生产之后,我在db/schema.rb那里看到了这个git diff:

-    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的开发?

1 个答案:

答案 0 :(得分:6)

您的Rails版本是否已更改? Rails最近有一个变化可以说明这一点:https://github.com/rails/rails/pull/19066

基本上,由于MySQL没有布尔列类型,因此Rails对TINYINT(1)属性使用:boolean列类型,这在将模式转储到schema.rb时反映出来。到现在为止还挺好。但是如果有人试图将相同的schema.rb加载到PostgreSQL中,它会失败,因为Postgres 具有BOOLEAN列类型,但声明了BOOLEAN列的长度是非法的。从MySQL数据库转储limit: 1属性时,删除:boolean选项可以解决此错误(无论如何都不需要)。

因此,如果您的架构最后一次被转储(运行迁移时会发生这种情况),那么您在Rails 4.2.2或更早版本中就可以在limit: 1中获得schema.rb,如果您随后升级了到4.2.3并再次转储你的架构,limit: 1将会消失。

除了修复上述错误之外,此更改没有任何效果 - 您的schema.rb的功能与以前完全相同 - 所以没有什么可担心的。