Ruby ActiveRecord::与AR 5.1和Sinatra 2的NOTNULL冲突

Ruby ActiveRecord::与AR 5.1和Sinatra 2的NOTNULL冲突,ruby,activerecord,sinatra,sinatra-activerecord,Ruby,Activerecord,Sinatra,Sinatra Activerecord,我们正在使用: gem 'sinatra', '~> 2.0.0' gem 'activerecord', '~> 5.1.1' gem 'sinatra-activerecord', '~> 2.0.13' 问题是,使用ActiveRecord 5,我们无法通过迁移: rake aborted! ActiveRecord::NotNullViolation: Mysql2::Error: Field 'created_at' doesn't have a default v

我们正在使用:

gem 'sinatra', '~> 2.0.0'
gem 'activerecord', '~> 5.1.1'
gem 'sinatra-activerecord', '~> 2.0.13'
问题是,使用ActiveRecord 5,我们无法通过迁移:

rake aborted!
ActiveRecord::NotNullViolation: Mysql2::Error: Field 'created_at' doesn't have a default value: INSERT INTO `ar_internal_metadata` (`key`, `value`) VALUES ('environment', 'default_env')
/home/alex/.rbenv/versions/2.3.0/bin/ruby_executable_hooks:15:in `eval'
/home/alex/.rbenv/versions/2.3.0/bin/ruby_executable_hooks:15:in `<main>'
Mysql2::Error: Field 'created_at' doesn't have a default value
/home/alex/.rbenv/versions/2.3.0/bin/ruby_executable_hooks:15:in `eval'
/home/alex/.rbenv/versions/2.3.0/bin/ruby_executable_hooks:15:in `<main>'
rake中止!
ActiveRecord::NotNullViolation:Mysql2::错误:字段“created_at”没有默认值:插入到“ar_internal_metadata”(“key”,“value”)值(“environment”,“default_env”)
/home/alex/.rbenv/versions/2.3.0/bin/ruby\u executable\u hooks:15:in'eval'
/home/alex/.rbenv/versions/2.3.0/bin/ruby\u executable\u hooks:15:in`'
Mysql2::错误:字段“created_at”没有默认值
/home/alex/.rbenv/versions/2.3.0/bin/ruby\u executable\u hooks:15:in'eval'
/home/alex/.rbenv/versions/2.3.0/bin/ruby\u executable\u hooks:15:in`'
AR5添加了一个名为ar_internal_metadata的新表,以防止生产中的破坏性耙:

正如您在日志中所看到的,值接收Null,并且它引发迁移挂起

我们已尝试添加此环境变量,但没有:
禁用数据库环境检查=1


有人能帮我们吗?

将包含
:null=>false
的db列更改为
:null=>true


发生这种情况的原因是MySql的新版本默认情况下会启用“严格模式”。任何具有:null=>false的列都需要使用某种数据填充该列。看起来你的是空的,所以你得到了一个错误

将具有
:null=>false的db列更改为
:null=>true


发生这种情况的原因是MySql的新版本默认情况下会启用“严格模式”。任何具有:null=>false的列都需要使用某种数据填充该列。看起来你的是空的,所以你得到了一个错误

你的应用程序中有连接表吗?没有@hashrocket,它有三个表。这两个表都不是联接表。是否有任何表包含:null=>false?一个,就是我要在迁移中删除的列。但错误是内部表的错误。我们无法更改它。你的应用程序中有联接表吗?没有@hashrocket,它有三个表。这两个表都不是联接表。是否有任何表包含:null=>false?一个,就是我要在迁移中删除的列。但错误是内部表的错误。我们无法更改它。它有一个默认值(false),但这不是问题所在。它在另一个表中。您试过了吗?我在迁移中删除了该列,效果很好。但它稍后会为
ar\u internal\u metadata
表引发一个错误。任何新的迁移都会这样做。您是在生产环境中尝试这一点吗?不,在开发中它有一个默认值(false),但这不是问题所在。它在另一个表中。您试过了吗?我在迁移中删除了该列,效果很好。但它稍后会为
ar\u internal\u metadata
表引发一个错误。任何新的迁移都可以做到这一点。您是在生产环境中尝试这一点吗?不是,在开发中