Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Heroku rake db:迁移_Ruby On Rails_Ruby_Heroku - Fatal编程技术网

Ruby on rails Heroku rake db:迁移

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”这可能意味着您运行了一次,但失败了

Heroku告诉我有些迁移还没有运行,但很明显它们已经运行了。看起来好像是在一次迁移之后。我怎样才能解决这个问题

当我运行
rake db:migrate
时,它告诉我
rake中止了Mysql2::错误:重复列名
。我知道已经创建了这些字段,也非常确定迁移已经运行,因为这些字段在任何其他迁移中都不存在,rake db:migrate在我的本地系统上运行得很好


我怎样才能解决这个问题?我想Heroku只是没有意识到它已经进行了迁移。我如何告诉它“您已经运行了迁移xxx”

这可能意味着您运行了一次,但失败了;mysql中的表更改不是事务性的,因此您可能会处于不好的状态。某些更改可能已运行,但并非所有更改都已运行


您唯一能做的就是确定哪些部分已经运行,在迁移中注释掉这些行,提交并推送并运行迁移,绕过已经运行的部分。

如果迁移未完全应用,请执行以下操作之一:

  • 使用dbconsole撤消应用的更改,然后再次运行迁移,或者
  • 使用dbconsole手动更改剩余的架构,然后将记录插入到
    schema_migrations
    表中
根据迁移脚本中的更改类型,您需要决定上面哪种更改最简单。如果已经应用的更改是破坏性更改,例如删除列或表,则可以重新创建列或表,以便迁移能够运行。如果其余的更改很容易转换为SQL,那么这可能会更容易

将记录插入
schema_migrations
表将允许应用程序认为迁移已成功应用。只有当您完全满意迁移更改已完全应用时,才能执行此操作。它有一列,
version
,需要包含迁移文件名的数字部分


最后,这是一个为什么应该使用Postgres而不是MySQL的例子。Postgres能够回滚(大多数)事务中的架构更改,因此您不会只剩下半个应用的迁移。

删除有问题的迁移文件,然后继续处理更有趣的问题?是的,这就是我目前正在做的。我只是觉得奇怪,如果它以前运行过并失败过,那么为什么所有这些字段都进入数据库?