与AR 5.1和Sinatra 2的ActiveRecord :: NotNullViolation

时间:2017-05-17 12:40:56

标签: 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 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>'

AR5添加了一个名为ar_internal_metadata的新表,以防止生产中的破坏性耙: http://blog.bigbinary.com/2016/06/07/rails-5-prevents-destructive-action-on-production-db.html

正如您在日志中看到的那样,值正在接收Null,并且它会在迁移暂挂时提升。

我们尝试添加此ENV_VARS但没有: DISABLE_DATABASE_ENVIRONMENT_CHECK=1

有人可以帮助我们吗?

1 个答案:

答案 0 :(得分:0)

:null => false的数据库列更改为:null=> true

发生这种情况的原因是因为较新版本的MySql启用了&#34;严格模式&#34;默认情况下。任何列:null =&gt; false要求使用某种数据填充列。看来你是空的,所以你得到一个错误。