2013-04-12 40 views
3

因此,在开发过程中的某一点,我添加了一个迁移功能,将列添加到我的用户表中。此栏添加了“美元”属性。之后,我决定通过编写删除迁移来删除“美元”属性。后来我意外地删除了初始迁移来添加美元,所以为了解决运行db时出现的错误:迁移到本地SQLite数据库,我也删除了RemoveDollarsFromUsers迁移。Ruby on Rails删除仍在Heroku上运行的迁移

貌似在我部署到heroku之前解决了这个问题。在用heroku pg:reset DATABASE重置数据库后,我跑heroku run rake db:migrate,并得到一个错误,说“美元”不是用户的属性。日志文件显示它曾尝试运行我以前删除的RemoveDollarsFromUsers迁移。

所以我再次检查我的回购是最新的,然后我试图完全重置并启动一个新的应用程序在heroku,也许heroku是记住旧的迁移。有了新的heroku应用程序,我得到了同样的错误,尽管我推送的回购应该没有任何参考文件。

这是一个混帐问题?我唯一能想到的就是git使用RemoveDollarsFromUsers迁移来推送旧版本,否则heroku甚至不知道它呢?

+0

如果你做了'git status',你会得到什么?你确定删除了你提交删除的文件后吗? – fmendez

+0

对不起,这是我第一次使用这个网站,我不知道如何做那些嵌入式代码窗口的人。当我运行git status的时候,它基本上给了我一个没有被提交的东西的清单,包括删除我正在谈论的文件。很明显,你正在做的事情。但是,即使在添加git之后。和git commit,它仍然说这些文件还没有被提交 –

+0

您需要先将代码推送到heroku。推后,尝试重置数据库,然后运行迁移。 – jvnill

回答

3

因此,迁移记录在模式迁移表中,并指定运行耙子db:migrate甚至db:resetdb:setup时运行哪个点。

正如你所说,有时它会混淆,特别是如果你改变了LOWER链下的迁移。让它再次运行整个事情的一个简单方法是删除shchema_migrations表(尽管如果您在生产环境中并且有要保留的数据,这可能会有风险)。现在运行db:migrate将逐步完成所有这些步骤。

返回基地的最简单方法是在db/schema.rb之间创建一个新的迁移和复制(使其反映出您想要的结果)。然后,您可以删除其他迁移,删除数据库,然后运行新的迁移。

确保备份任何你不想丢失的东西!