Rails 5.0.1 db:migrate - ActiveRecord :: RecordNotUnique:Mysql2 :: Error:关键'PRIMARY'的重复条目':INSERT INTO`ar_internal_metadata`

时间:2017-04-30 21:22:03

标签: mysql ruby-on-rails activerecord

我最近从4.2.x升级到Rails 5.0.1,在尝试db:migrate时遇到了ar_internal_metadata问题,这似乎与MySQL5不兼容。

要重现(假设安装了Gems的Rails 5环境和数据库模式):

  1. 从开发数据库中删除ar_internal_metadata表(如果它在那里)。
  2. 运行“bundle exec rake db:migrate”
  3. 再次运行。
  4. 在第二次运行时(无论迁移是否挂起),都会引发此错误:

    ActiveRecord :: RecordNotUnique:Mysql2 ::错误:密钥'PRIMARY'的重复条目'':INSERT INTO ar_internal_metadatacreated_atupdated_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运行)?

0 个答案:

没有答案