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

tir*_*adc 1 mysql git ruby-on-rails rails-migrations

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

-    t.boolean  "published",          limit: 1
+    t.boolean  "published"
Run Code Online (Sandbox Code Playgroud)

-    t.boolean  "visible",            limit: 1,                    default: false
+    t.boolean  "visible",                                         default: false
Run Code Online (Sandbox Code Playgroud)

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

Jor*_*ing 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属性时删除选项来修复此错误(无论如何都不需要).

因此,如果最后一次您的架构被倾倒(当您运行迁移这恰好)你是on Rails的4.2.2或更早的版本,你会得到limit: 1schema.rb,而如果随后升级到4.2.3后弃你的架构再次limit: 1将消失.

除了修复上述错误之外,这种改变没有任何影响 - 你的schema.rb功能与之前完全相同 - 所以没有什么可担心的.