gpt4 book ai didi

ruby-on-rails - 是否可以在没有迁移文件的情况下添加或删除列?

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:27 24 4
gpt4 key购买 nike

我正在为我的应用程序集成 Facebook 登录。我有一个名为“User”的模型,它应该有两列:“provider”和“uid”。开发中一切都很好,但我只是注意到在生产中,“用户”没有任何一列。我尝试在我的服务器上重新迁移我的数据库,但没有帮助。

所以我检查了我的实时代码,“provider”和“uid”都列在我的 schema.db 中,但它们没有在我的任何迁移文件中提及,无论是在生产还是开发中。在我的任何提交中也没有任何此类迁移文件的记录。不知何故,它们显然是在没有任何迁移文件的情况下添加到我的架构中的。这可能吗?我的意思是,如果我确实写了一个迁移文件并且后来不小心删除了它,我认为它仍然会出现在我的提交中,对吧?很久以前我不记得我做了什么。

但无论如何,这是我的问题:我不能写一个添加列的迁移文件,因为这会导致开发冲突,我不能写一个删除它们的迁移文件然后另一个文件添加它们,因为那样在生产中,服务器将首先尝试删除不存在的列。是否可以在不编写任何迁移文件的情况下添加或删除列?或者我应该写一个删除它们,在开发中迁移它,删除它,写另一个添加它们,然后在开发和生产中迁移它?

由于这些列在我的 schema.db 中但不在我的实际数据库中,我想真正的问题是迁移是否编辑了模式?因为如果是这样,那么我认为我可以先向下迁移,然后再向上迁移开发和生产。

最佳答案

如果我是你,我会遵循以下快速修复,虽然它不是很好,但在迁移困惑的情况下,我会这样做。

编写一个添加列的迁移:provider & uid。不要在本地运行迁移,运行它没有任何意义。提交您的代码,将其部署到生产环境,然后在那里运行迁移。稍后,删除迁移,将代码推送到生产环境。删除迁移文件不会撤消更改:它不会删除其中的两列。

陷阱:这样,您可以修改更改,但是关注开发人员呢?迁移是一种帮助维护每个开发人员和每个环境的模式一致的方法。

这样做的好方法:您可以运行 rake db:migrate:status 列出所有已写入但未删除的迁移,您可以看到如何其中有许多已经上升,有多少已经下降。可能是,添加列的迁移是在过去编写的,但它在您的本地环境中,但您不在生产环境中。

请记住,当您执行 rake db:migrate:status 时,它还会列出与每个迁移相关联的版本号,因此如果您想关闭单个迁移,您可以执行以下操作:

rake db:migrate:down VERSION=(version_number)

并且执行 rake db:migrate 将启动过去发生故障的任何迁移。

关于ruby-on-rails - 是否可以在没有迁移文件的情况下添加或删除列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41082023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com