清理Rails迁移并保留生产数据

时间:2019-05-31 21:33:53

标签: mysql ruby-on-rails activerecord ruby-on-rails-5

我们维护着一个大型项目,其迁移可以追溯到大约4年。

理想情况下,我们希望删除所有旧的迁移并将架构内容复制到initial_migration.rb文件中。

那么我的问题包括三件事:

  • 这会消灭我们的客户数据库吗?
  • 如果是,我们如何持久保存数据?
  • 一般来说,什么是最好的方法

先谢谢了。

2 个答案:

答案 0 :(得分:1)

这是我的处理方式:

  1. 至少在三个位置备份数据库。
  2. 复制一小部分数据库。
  3. 将副本转换为种子数据(如果令人困惑,请告诉我,我将提供一个示例)。
  4. 创建一个新的Rails应用(rails new <appname>)。
  5. 在新应用中为旧数据库中的每个表创建一个迁移,并具有所需的所有字段和格式。
  6. 迁移新数据库。
  7. 为种子中每种表类型(即!Student.create!(name:'Jane', email: 'jane@edu.edu') ... Teacher.create!(')的创建方法中至少添加一个)。如果数据没有持久化到表中,这将导致ActiveRecord给您一个更详细的错误。
  8. 运行rails db:seed
  9. 工作正常后,对更大的数据库块重复测试,或者跳过尝试整个过程。

交换数据库在很大程度上取决于您的部署方式,我不是该领域的专家。您应该咨询组织中的负责人,或者您可以尝试在此处Application Migration Best Practices进行阅读。

答案 1 :(得分:0)

我认为首先您应该备份数据库。

对于您当前的环境,我认为不需要运行新的迁移,因此,它的时间戳应小于当前架构的版本。

如果您想在其他环境中运行该新迁移文件,我认为可以。我认为,您将拥有另一个具有相同结构的数据库。或者,您可以仅针对这些环境复制当前版本。