0

有点奇怪的问题,我怀疑。我将在下面立即解释问题,然后给出解释我如何到达这里的背景,对于那些感兴趣的人

问题:

由于迁移,我的模式处于这样一种状态,它将我标记为删除和添加了相同的列。换句话说,当我比较 schema.rb 时,我得到了这个:

-    t.integer  "cut_id"
-    t.datetime "created_at",  :null => false
-    t.datetime "updated_at",  :null => false
-    t.integer  "animal_id"
+    t.datetime "created_at",                     :null => false
+    t.datetime "updated_at",                     :null => false
+    t.integer  "animal_id"
+    t.integer  "cut_id"

令人担忧的是,虽然这不会净添加/删除列,但如果我将此代码推送到生产环境并运行迁移,它基本上会清除现有数据,即使它没有删除 net.xml 中的任何列。

是这样吗?有谁知道数据库是否会从字面上删除然后添加四列,或者意识到没有任何变化?如果它会删除它们,任何人都可以想办法解决这个问题并保存数据以在删除之前重新插入吗?我不介意数据擦除和替换之间的滞后时间。

我是怎么到这里的:

基本上,我在本地进行了一大堆更改,涉及许多迁移,然后才意识到我已经删除了一些列,我需要将所有我想要的数据迁移到新表,因为我很仓促,而且是个白痴。

幸运的是,这只是在本地。不幸的是,我只是做了一个 git reset HEAD^ 来扔掉我的工作,但是即使迁移消失了,架构仍然顽固地处于迁移后的状态,并且无法重置或其他任何东西。所以我经历了尝试恢复旧迁移并将它们回滚的整个过程,半成功,然后编写其他迁移以完全回滚我半回滚的更改。

巨大的混乱,结果就是这一个问题。毕竟这不是问题,我可以轻松部署/睡觉吗?

4

1 回答 1

1

所以这里有两个不同的问题——迁移和模式。如果您运行删除列的迁移,那么列将被删除,它们包含的任何数据也将被删除。因此,您可能想要编辑您的迁移并删除或编辑删除您要保留的列的任何迁移。要非常非常小心,任何迁移都不会删除您想要保留的数据。

除非您使用 rake 任务 (rake db:schema:load) 显式加载模式,否则 schema.rb 本质上与您的生产数据库无关。这会清除您的数据,但作为一般规则,您不会对生产系统执行此操作。

于 2013-11-07T05:45:47.627 回答