mysql - rake 数据库 :migrate catch errors

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

我已经把我的开发数据库和我的生产数据库同步了,现在好像有很多迁移应用到这个数据库,但是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/

相关文章:

mysql - 以不同的方式编写查询相同的方法

ruby-on-rails - Rails 4 Heroku postgreSQL 错误

database - 我可以从 VS 数据库项目的部署后脚本中调用不同的 SQL 脚本吗

mysql - 基于四个表的多重联接

javascript - 将数据从可编辑表单保存到数据库

启动时的 MySQL 问题

mysql - 向 MySQL 单元添加时间维度

mysql - 在 Rails 中创建新对象时出错

ruby-on-rails - 使用 Devise 身份验证和 Rails 登录后用户帖子丢失?

mysql - 错误: OLE DB provider "MSDASQL' ' for Linked Server '' bequick'' was unable to begin a Distributed transaction