【发布时间】:2017-04-26 04:58:45
【问题描述】:
我正在为我的应用集成 Facebook 登录。我有一个名为“User”的模型,它应该有两列:“provider”和“uid”。开发中一切都很好,但我只是注意到在生产中,“用户”没有任何一列。我尝试在我的服务器上重新迁移我的数据库,但没有帮助。
所以我检查了我的实时代码,并且“provider”和“uid”都列在我的 schema.db 中,但在生产或开发的任何迁移文件中都没有提到它们。在我的任何提交中也没有任何此类迁移文件的记录。不知何故,它们显然是在没有任何迁移文件的情况下添加到我的架构中的。这甚至可能吗?我的意思是,如果我确实写了一个迁移文件,但后来不小心删除了它,我认为它仍然会出现在我的提交中,对吧?那是很久以前的事了,我不记得我做了什么。
但无论如何,这是我的问题:我不能编写一个添加列的迁移文件,因为这会导致开发冲突,我不能编写一个迁移文件删除它们然后另一个文件添加它们,因为那时在生产中,服务器将首先尝试删除不存在的列。是否可以在不编写任何迁移文件的情况下添加或删除列?或者我应该写一个删除它们,在开发时迁移它,删除它,再写一个添加它们,然后在开发和生产中迁移它?
由于这些列在我的 schema.db 中,但不在我的实际数据库中,我想真正的问题是迁移是否会编辑架构?因为如果是这样,那么我认为我可以在开发和生产上运行向下迁移,然后向上迁移。
【问题讨论】:
-
您是否关心开发环境中那些列中的数据?您可以手动删除它们,添加缺少的迁移以添加它们,然后在任何地方运行该迁移。顺便说一句,
schema.rb基于您数据库的当前状态,这可能与您的迁移有任何关系,也可能没有任何关系。 -
provider 和 uid 所在的表的名称是什么?听起来“uid”是“user_id”的缩写,它用于与 :users 表的关联,因为用户 id 只是 :users 表中的普通 id。也许您可以向我们展示架构?
-
@muistooshort 如何手动删除列?不,我不在乎数据。
-
@user125272 这两列都应该是 User 表的一部分。 “uid”表示用户的 Facebook ID,如果他们使用 Facebook 在我的应用上创建帐户。
-
您可以使用
psql连接到数据库并说alter table users drop column provider; alter table users drop column uid;。或者您可以编写迁移以删除列,在您的开发环境中运行迁移,然后删除迁移。
标签: ruby-on-rails database postgresql database-migration