我已经把我的开发数据库和我的生产数据库同步了,现在好像有很多迁移应用到这个数据库,但是rake并不知道这些。有很多,并且介于两者之间的一些也没有被应用。
所以每次我 rake db:migrate
都会运行一些迁移,然后它会在“表已存在”或“列已存在”处停止
有没有办法告诉 rake 发生了什么,或者更好的是,我可以传递一个参数给 rake db:migrate
来告诉它忽略“已经存在”的错误并直接移动见鬼去吧。
最佳答案
您可以在 create_table
上指定一个 force: true
参数来强制它删除表并重新创建它,这通常可以避免这些错误。但是,这似乎是解决问题的一种蛮力方法。
问题通常发生在您从生产中转储架构并在本地加载时。生产架构对本地新表一无所知,它会复制整个 schema_migrations
列表,因此您在本地运行迁移的事实将丢失。
解决此问题的一种方法是从转储中跳过 schema_migrations
表。您仍然会在本地加载所有生产数据,但不会覆盖本地迁移列表。
对于 mysqldump,这是一个添加 --ignore-table=schema_migrations
参数的问题。
但是,您需要谨慎对待解决此问题的任何方法。跳过迁移非常容易,因为它创建了一个表而忘记了它还向现有表添加了一列。
我通常更喜欢手动方法,或者将值添加到 schema_migrations
以获取我知道在本地发生的迁移。或者只是在我在本地重新运行时注释掉导致问题的迁移位。两者都不是特别好,但我知道我在本地没有错过任何步骤。
关于mysql - rake 数据库 :migrate catch errors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23885964/