我已将我的开发数据库与我的生产数据库同步,现在似乎已经有很多迁移应用于此数据库,但是rake并不知道这一点。有很多,其中有一些已经应用不。
因此每次我rake db:migrate
运行一些迁移,然后它停在"表已经存在"或者"列已经存在"
有没有办法告诉rake发生了什么,甚至更好,我可以传递给rake db:migrate
的一个论点,告诉它忽略"已经存在"错误,只是移动地狱。
答案 0 :(得分:0)
您可以在force: true
上指定create_table
参数,以强制它删除表并重新创建它,这通常可以解决这些错误。然而,这似乎是解决问题的一种蛮力方式。
当您从生产中转储架构并在本地加载架构时,通常会出现此问题。生产模式本地不知道有关新表的任何内容,它会复制schema_migrations
的整个列表,因此您在本地运行迁移的事实将丢失。
解决此问题的一种方法是从转储中跳过schema_migrations
表。您仍将在本地加载所有生产数据,但不会覆盖本地迁移列表。
使用mysqldump这是一个添加--ignore-table=schema_migrations
参数的问题。
但是,您需要小心解决此问题的任何方法。跳过迁移非常容易,因为它会创建一个表并忘记它还会向现有表添加一列。
我通常更喜欢手动方法,并将值添加到schema_migrations
以便我知道本地发生的迁移。或者只是在我在本地重新运行它们时注释掉导致问题的迁移位。两者都不是特别好,但我知道我没有错过本地的任何步骤。