ruby-on-rails - 如何跨 git 分支管理对数据库的更改?

标签 ruby-on-rails database git migration

所以,我有一个正在试验的应用程序。

我的 develop 分支的当前状态良好。我想安装 spree,但它伴随着对数据库的许多迁移和更改。

所以我基于我的 develop 分支为 Spree 创建了一个新分支。

我安装了 gem,运行了迁移,以及所有这些东西。

但是,我搞砸了一些东西,所以我想恢复到我的 develop 分支并删除了 spree 分支。

我假设我的 schema.rb 会恢复正常,我的数据库也会恢复正常。

但后来我查看了我的 Schema.rb,我看到了很多 Spree 表。

不仅如此,我还在我的 Schema.rb 中看到其他表,我知道我已经为 spree 分支创建了一个迁移并“删除”了这些表。

例如,我的 Schema.rb 中有一个 orders 表,我知道它应该被删除。有点困惑,我决定创建一个新的迁移以删除 orders 表以及我在安装 spree 之前删除的其他表,但我收到一个 PG 错误,指出该表不存在。

所以....现在看来,我的 schema.rb 和 DB 不同步。

更糟糕的是,我的 schema.rb 和我的 db/migrate 文件夹没有同步。

我打算在我的 schema.rb 中手动删除不应该存在的表的 create_table 语句 - 但这样一团糟。

我怎样才能摆脱这个坑,以后又该如何预防?

总结

数据库

狂欢前状态

  • 表A
  • 表B
  • 表C

狂欢状态

  • 表 A(已删除)
  • 表 B(已删除)
  • 表C
  • Spree_Table_A
  • Spree_Table_B

狂欢后状态

  • 表 A(已删除)
  • 表 B(已删除)
  • 表C
  • Spree_Table_A
  • Spree_Table_B

狂欢状态基本相同

数据库/迁移文件夹

狂欢前状态

  • 表 A 的迁移
  • 表 B 的迁移
  • 表 C 的迁移

狂欢状态

  • 迁移以删除表 A
  • 迁移以删除表 B
  • 表 C 的迁移
  • Spree_Table_A 的迁移
  • Spree_Table_B 的迁移

狂欢后状态

  • 表 A 的迁移
  • 表 B 的迁移
  • 表 C 的迁移

请注意,“Post-Spree 状态”的迁移不会与“Post-Spree 状态”的数据库状态同步。

最佳答案

将评论转换为回答,因为它变得相当冗长:

为任何新分支拥有一个单独的数据库会更安全,即使它只是开发数据库的快照。您将需要从您的 spree 分支恢复迁移(如果可能)并对它们运行 down 以使您的数据库恢复到原来的位置。

rake db:migrate VERSION=xxx 

其中xxx等于spree前最后一次迁移的数量

我不是 git 专家,但如果你的分支是通过 git 删除的,那么这个线程可能会帮助你恢复它。如果您只是在本地删除了它,那么您应该可以再次检查它。

Git: Recover deleted (remote) branch

关于ruby-on-rails - 如何跨 git 分支管理对数据库的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16786489/

相关文章:

ruby-on-rails - 用 Ruby 生成迷宫

mysql - Gem 允许使用分片 mysql 数据库访问数据,同时保持 Activerecord 的使用

mysql - 从 kubernetes 将 mysql 主机列入白名单

database - "Parametrized"数据库模型&后端存储系统以及数据挖掘操​​作

git - 在 git 中,在 pull 后编辑历史预 pull 提交会导致与原点的分歧

python - 另一个 pymacs 助手在 30 秒内没有启动(但有更多调试)

ruby-on-rails - Rails 4单选按钮表单帮助程序,true尚未验证

ruby-on-rails - 如果我不需要实时功能,为什么要使用 Node.js?

python - sqlalchemy 核心完整性错误

git - 如何将 Git 存储库重置为其新克隆的状态?