我最近从4.2.x升级到Rails 5.0.1,在尝试db:migrate时遇到了ar_internal_metadata问题,这似乎与MySQL5不兼容。
要重现(假设安装了Gems的Rails 5环境和数据库模式):
在第二次运行时(无论迁移是否挂起),都会引发此错误:
ActiveRecord :: RecordNotUnique:Mysql2 ::错误:密钥'PRIMARY'的重复条目'':INSERT INTO ar_internal_metadata
(created_at
,updated_at
)VALUES('2017-04- 30 20:49:17','2017-04-30 20:49:17')
ar_internal_metadata架构向我表明MySQL5似乎确实有一个有效的抱怨:主键字段设置为非空,但默认值为null。并且,因为它是varchar(255)类型,所以它不能自动递增。显然,ActiveRecord机器没有为'key'提供值。
mysql> desc ar_internal_metadata;
+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| key | varchar(255) | NO | PRI | NULL | |
| value | varchar(255) | YES | | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
+------------+--------------+------+-----+---------+-------+
4 rows in set (0.02 sec)
以下是第二次调用db:migrate:
之前的ar_internal_metadata的内容mysql> select * from ar_internal_metadata;
+-----+-------+---------------------+---------------------+
| key | value | created_at | updated_at |
+-----+-------+---------------------+---------------------+
| | NULL | 2017-04-30 20:56:39 | 2017-04-30 20:56:39 |
+-----+-------+---------------------+---------------------+
1 row in set (0.00 sec)
有没有人见过这个问题?有关变通方法的建议或在哪里查看? ActiveRecord应该为ar_internal_metadata为'key'添加什么值(特别是第二次db:migrate运行)?