Ruby on rails 为什么不';数据迁移不是一件事吗?

Ruby on rails 为什么不';数据迁移不是一件事吗?,ruby-on-rails,migration,Ruby On Rails,Migration,在开发过程中,我遇到了一些任务,这些任务需要向数据库中添加数据以使软件的某些方面运行。每当这种情况发生时,我通常只是进行迁移来创建对象;但这似乎是在以一种非预期的方式使用迁移。我们可以使用raketask,但对于只需要添加到所有环境中的东西,这就没有什么意义了(需要开发人员干预才能工作,而不仅仅是迁移) 这就引出了这样一个想法,即应该进行数据迁移——这是一种很自然的思路,我认为,既然数据迁移不存在,那么一定有很好的理由 那么--为什么数据迁移不是一件事?或者,这样的任务应该如何工作?我可以想象在

在开发过程中,我遇到了一些任务,这些任务需要向数据库中添加数据以使软件的某些方面运行。每当这种情况发生时,我通常只是进行迁移来创建对象;但这似乎是在以一种非预期的方式使用迁移。我们可以使用raketask,但对于只需要添加到所有环境中的东西,这就没有什么意义了(需要开发人员干预才能工作,而不仅仅是迁移)

这就引出了这样一个想法,即应该进行数据迁移——这是一种很自然的思路,我认为,既然数据迁移不存在,那么一定有很好的理由


那么--为什么数据迁移不是一件事?或者,这样的任务应该如何工作?

我可以想象在迁移中数据操作完全有效的一些情况:

  • “产品代码”列(格式为“XYZ-12345”)分为“制造商代码”(“XYZ”)和“序号”(“12345”)。添加两列、根据旧列中的值更新它们并最终删除旧列的顺序可以被认为是一个原子操作

  • StatusCode模型,是订单状态的查找表,其值为Active/Cancelled/Completed。假设您对订单处理流程进行了更改,该流程现在可能会挂起。与前面的示例相比,这不太明显,许多人会对此提出异议,但我发现在这种情况下,通过迁移添加新的StatusCode记录是可以接受的。然而,使用这种方法,您应该始终保持所有状态代码由迁移维护(和种子,因为数据不会反映在模式转储中),并且不允许从工作应用程序中操作它们


  • 请注意,在这两种情况下,数据都不会单独修改,它总是伴随结构或,至少,应用程序代码更改。

    您是否使用了
    db:seed
    ?这似乎主要用于新数据库--这为潜在的活动+填充数据库增加了价值。也许数据迁移本身并不作为迁移类型存在,因为已经有一种非常好的方法来实现同样的目标?我创建的迁移总是插入数据——通常是系统中使用的数据,但不打算由用户或管理员维护。