【问题标题】:Rails : Why shouldn't I directly make changes directly in schema than do migrateRails:为什么我不应该直接在模式中直接进行更改而不是迁移
【发布时间】:2015-08-21 15:24:54
【问题描述】:

我正在将 ruby​​ on rails 用于应用程序。目前我正在本地服务器上开发它。

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        而且我确信还有更多好处。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-24
          • 2011-03-11
          • 1970-01-01
          • 2010-12-31
          • 1970-01-01
          • 1970-01-01
          • 2014-05-17
          • 2014-07-08
          相关资源
          最近更新 更多