我最近开始注意到在部署到生产之后,我在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的开发?
答案 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
的功能与以前完全相同 - 所以没有什么可担心的。