【问题标题】:Rails - delete migrations vs remove tablesRails - 删除迁移与删除表
【发布时间】:2017-05-19 13:00:25
【问题描述】:

过去 5 个月我一直在构建一个应用程序,我即将发布 Alpha 版。这段时间经历了很多变化,因此数据库中有很多剩余的表和列不再使用。

我的问题是,由于应用程序中没有数据,我可以只删除实际的迁移然后重置数据库而不是创建新的迁移来删除表和列吗?或者会有我不知道的缺点?

谢谢

【问题讨论】:

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


    【解决方案1】:

    来自migrations上的指南

    移民,尽管可能很强大,但不是权威来源 为您的数据库架构。该角色属于 db/schema.rb 或 Active Record 通过检查数据库生成的 SQL 文件。他们 不是为编辑而设计的,它们只是代表当前状态 数据库。

    没有必要(而且容易出错)部署一个新的 通过重播整个迁移历史记录的应用程序。它简单得多 并且更快地将当前的描述加载到数据库中 架构。

    您似乎对迁移的角色有点误解,它们不应该再次运行来设置您的数据库,该角色是让schema.rb 填写命令

    rake db:schema:load
    

    我建议删除所有迁移,然后从数据库中删除您不想要的表和列,然后您可以运行

    rake db:migrate
    

    这将为您生成一个更新的schema.rb 文件,其中包含您想要的数据库版本。

    【讨论】:

    • 我认为你是对的 Iceman,我似乎对迁移的理解存在根本性的缺陷。我将阅读有关迁移的内容,然后在我更好地理解后应用您的解决方案。感谢您的回答,非常感谢
    【解决方案2】:

    这些迁移的优点是:与多人一起编码 -> 易于设置开发环境和共享数据库。

    您可以将您的应用程序推送到任何环境,您不必关心数据库的状态。移民会告诉你!

    在您的情况下,这有点奇怪:您在一个项目上独自工作了 5 个月,但您从未想过清理未使用的表或列!!??我的建议是:写下(在纸上)你真正需要的表格和列,然后你有两个选择:

    1. 编写迁移以删除不需要的列和表或
    2. 如果您没有实时数据并且您不负责重置并且您想花费额外的时间,您可以使用您的(纸质)工作表中的表格和列创建一组新的迁移

    【讨论】:

    • 嗨,西蒙,感谢您的回复。抱歉,我不清楚,但实际上我并不是一个人工作,而是我和另一位开发人员。我们每个人都有自己的开发环境以及 Heroku 上的暂存站点和 Heroku 上的实时站点。直到现在我们还没有删除表,因为我们直到现在还不确定业务方向。关于您的建议,为什么一种选择不只是删除现在不相关的迁移然后重置数据库?这不是一个可行的选择吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 2018-09-22
    • 2011-10-29
    • 2011-04-30
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    相关资源
    最近更新 更多