【问题标题】:Cleaning up rails migrations & persisting production data [duplicate]清理 Rails 迁移和持久化生产数据 [重复]
【发布时间】:2019-05-31 21:33:53
【问题描述】:
我们维护一个大型项目,其中许多迁移可追溯到大约 4 年。
理想情况下,我们希望删除所有旧迁移并将架构内容复制到 initial_migration.rb 文件中。
那么我的问题包括三件事:
- 这会清除我们的客户数据库吗?
- 如果是这样,我们如何持久化数据?
- 一般来说,解决此问题的最佳方法是什么
提前致谢。
【问题讨论】:
标签:
mysql
ruby-on-rails
activerecord
ruby-on-rails-5
【解决方案1】:
以下是我的处理方法:
- 至少在三个位置备份数据库。
- 复制一小部分数据库。
- 将副本转换为种子数据(如果这令人困惑,请告诉我,我将提供一个示例)。
- 创建一个新的 Rails 应用 (
rails new <appname>)。
- 在新应用中为旧数据库中的每个表创建一个迁移,包含所需的所有字段和格式。
- 迁移您的新数据库。
- 在种子中的每个表类型的创建方法中至少添加一个
!,即Student.create!(name:'Jane', email: 'jane@edu.edu')、Teacher.create!('...)。如果数据没有保存到表中,这将导致 ActiveRecord 给您一个更详细的错误。
- 运行
rails db:seed。
- 当你有这个工作时,用更大的数据库块重复测试,或者跳到尝试整个事情。
更换数据库很大程度上取决于您的部署方式,我不是该领域的专家。您应该咨询您组织中的负责人,或者您可以尝试阅读此处Application Migration Best Practices。
【解决方案2】:
我认为首先你应该备份你的数据库。
对于您当前的环境,我认为不需要运行新的迁移,因此,它的时间戳应该小于您当前的架构版本。
如果您想在其他环境中运行该新迁移文件,我认为您可以。在我看来,您将拥有另一个具有相同结构的数据库。或者,您可以为这些环境复制当前的副本。