如何修复具有许多表的数据库,而不使用Rails进行匹配迁移

时间:2016-09-27 16:19:52

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

我正在帮朋友的rails应用程序。他们有一个包含许多表的数据库,这些表是使用SQL而不是使用rails迁移手动添加的。他们已经开始正常添加迁移,但他们需要让两者同步。

如果我们现在添加迁移,它们将会出错,因为这些表/列已经存在。如果我们将它们遗漏,人们必须使用db:schema:load来启动和运行,然后按名称一次运行一次迁移以避免错误。我们想避免这种情况,而是恢复健康状态。

有谁知道更好的方法让迁移与数据库同步?我们必须这样做而不会丢失任何数据。

2 个答案:

答案 0 :(得分:2)

这是question with the same problem(由于较旧的人没有接受答案,所以没有投票支持关闭你的副本):

解决方案有:

  
      
  1. 首先在s.apply(lambda x: bool(set(x).intersection(test))) 0 True 1 True 2 True 3 True dtype: bool
  2. 中引用您现有的MySQL数据库   
  3. 运行database.yml以生成rake db:schema:dump文件
  4.   
  5. schema.rb中的create_table方法粘贴到新的迁移中,然后使用Voila!
  6.   

为了避免任何不一致,您可以随时检查该表是否已存在,如果是,则完全跳过迁移:

schema.rb

答案 1 :(得分:1)

备份表中不存在的表内容后 迁移,你可以:

  • DROP这些表格;
  • 为每个已删除的表创建迁移;
  • 运行每个已创建的迁移;
  • 手动重新填充使用迁移创建的表。

这样,迁移就没有问题了。 如果您没有相关数据,请立即DROP