Rails:为什么我不应该直接在模式中直接进行更改而不是迁移

时间:2015-06-06 20:59:31

标签: ruby-on-rails ruby ruby-on-rails-3 migrate dbmigrate

我在轨道上使用ruby来申请。我现在正在我的本地服务器上开发它。

每次我需要对数据库进行更改时,我都需要创建一个迁移。为什么我不能直接在schema.rb本身进行更改?

我被允许重置数据库并重置表中的所有值。我遇到了一个问题,我需要将日期格式从“dateTime”更改为“timestamp”。现在有太多的领域无法改变。为什么我不能在schema.rb中更改它们?

3 个答案:

答案 0 :(得分:3)

schema.rb 是一个自动生成的文件,在您运行迁移后将从数据库的当前状态转储。虽然我强烈反对它,但实际上可以手动更改它,然后运行rake db:schema:load将其应用到数据库。但是,您将失去从迁移中获得的所有好处,并且您将忽略惯例。

那么,你问的有什么好处?仅举几例:

  • 当你犯错误时可以回滚
  • 他们可以更轻松地在单个项目上处理多个开发人员
  • 它们提供了在应用更改之前/之后清理和移动数据的地方
  • 他们为您提供了数据库架构更改的历史记录
  • 他们通过将多态关系等轨道概念映射到简单的DSL命令来减少一些样板,因此您不需要考虑如何命名和键入列

答案 1 :(得分:1)

首先,迁移很容易恢复。其次,通过迁移,您有历史,更重要的是,有变化的事物。第三,您可以向迁移添加其他代码(例如,为刚添加的列计算一些值)。

我确信还有更多好处。

答案 2 :(得分:0)

迁移是确保您的开发,测试和生产环境完全相同的关键。如果你开始在数据库中乱窜,dev会非常快地看起来就像prod ...事实上,你很可能会开始在prod中进行开发,这是一个非常糟糕的主意!