我们正在使用:
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
有人可以帮助我们吗?
答案 0 :(得分:0)
将:null => false
的数据库列更改为:null=> true
。
发生这种情况的原因是因为较新版本的MySql启用了&#34;严格模式&#34;默认情况下。任何列:null =&gt; false要求使用某种数据填充列。看来你是空的,所以你得到一个错误。