Ruby on rails Heroku rake db:迁移
Heroku告诉我有些迁移还没有运行,但很明显它们已经运行了。看起来好像是在一次迁移之后。我怎样才能解决这个问题 当我运行Ruby on rails Heroku rake db:迁移,ruby-on-rails,ruby,heroku,Ruby On Rails,Ruby,Heroku,Heroku告诉我有些迁移还没有运行,但很明显它们已经运行了。看起来好像是在一次迁移之后。我怎样才能解决这个问题 当我运行rake db:migrate时,它告诉我rake中止了Mysql2::错误:重复列名。我知道已经创建了这些字段,也非常确定迁移已经运行,因为这些字段在任何其他迁移中都不存在,rake db:migrate在我的本地系统上运行得很好 我怎样才能解决这个问题?我想Heroku只是没有意识到它已经进行了迁移。我如何告诉它“您已经运行了迁移xxx”这可能意味着您运行了一次,但失败了
rake db:migrate
时,它告诉我rake中止了Mysql2::错误:重复列名
。我知道已经创建了这些字段,也非常确定迁移已经运行,因为这些字段在任何其他迁移中都不存在,rake db:migrate在我的本地系统上运行得很好
我怎样才能解决这个问题?我想Heroku只是没有意识到它已经进行了迁移。我如何告诉它“您已经运行了迁移xxx”这可能意味着您运行了一次,但失败了;mysql中的表更改不是事务性的,因此您可能会处于不好的状态。某些更改可能已运行,但并非所有更改都已运行
您唯一能做的就是确定哪些部分已经运行,在迁移中注释掉这些行,提交并推送并运行迁移,绕过已经运行的部分。如果迁移未完全应用,请执行以下操作之一:
- 使用dbconsole撤消应用的更改,然后再次运行迁移,或者
- 使用dbconsole手动更改剩余的架构,然后将记录插入到
表中schema_migrations
schema_migrations
表将允许应用程序认为迁移已成功应用。只有当您完全满意迁移更改已完全应用时,才能执行此操作。它有一列,version
,需要包含迁移文件名的数字部分
最后,这是一个为什么应该使用Postgres而不是MySQL的例子。Postgres能够回滚(大多数)事务中的架构更改,因此您不会只剩下半个应用的迁移。删除有问题的迁移文件,然后继续处理更有趣的问题?是的,这就是我目前正在做的。我只是觉得奇怪,如果它以前运行过并失败过,那么为什么所有这些字段都进入数据库?