首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AR 5.1和Sinatra 2的ActiveRecord::NotNullViolation

使用AR 5.1和Sinatra 2的ActiveRecord::NotNullViolation
EN

Stack Overflow用户
提问于 2017-05-17 20:40:56
回答 1查看 829关注 0票数 1

我们使用的是:

代码语言:javascript
复制
gem 'sinatra', '~> 2.0.0'
gem 'activerecord', '~> 5.1.1'
gem 'sinatra-activerecord', '~> 2.0.13'

问题是,对于ActiveRecord 5,我们不能通过迁移:

代码语言:javascript
复制
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的新表,以防止生产中的破坏性rake:http://blog.bigbinary.com/2016/06/07/rails-5-prevents-destructive-action-on-production-db.html

正如您在logs中看到的,值正在接收Null,并引发执行迁移挂起。

我们已尝试添加此ENV_VARS,但未添加任何内容:DISABLE_DATABASE_ENVIRONMENT_CHECK=1

有人能帮我们吗?

EN

回答 1

Stack Overflow用户

发布于 2017-05-17 21:14:21

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44025165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档