Rake db:迁移捕获错误

时间:2014-05-27 09:36:51

标签: mysql ruby-on-rails database ruby-on-rails-3 database-migration

我已将我的开发数据库与我的生产数据库同步,现在似乎已经有很多迁移应用于此数据库,但是rake并不知道这一点。有很多,其中有一些已经应用

因此每次我rake db:migrate运行一些迁移,然后它停在"表已经存在"或者"列已经存在"

有没有办法告诉rake发生了什么,甚至更好,我可以传递给rake db:migrate的一个论点,告诉它忽略"已经存在"错误,只是移动地狱。

1 个答案:

答案 0 :(得分:0)

您可以在force: true上指定create_table参数,以强制它删除表并重新创建它,这通常可以解决这些错误。然而,这似乎是解决问题的一种蛮力方式。

当您从生产中转储架构并在本地加载架构时,通常会出现此问题。生产模式本地不知道有关新表的任何内容,它会复制schema_migrations的整个列表,因此您在本地运行迁移的事实将丢失。

解决此问题的一种方法是从转储中跳过schema_migrations表。您仍将在本地加载所有生产数据,但不会覆盖本地迁移列表。

使用mysqldump这是一个添加--ignore-table=schema_migrations参数的问题。

但是,您需要小心解决此问题的任何方法。跳过迁移非常容易,因为它会创建一个表并忘记它还会向现有表添加一列。

我通常更喜欢手动方法,并将值添加到schema_migrations以便我知道本地发生的迁移。或者只是在我在本地重新运行它们时注释掉导致问题的迁移位。两者都不是特别好,但我知道我没有错过本地的任何步骤。