Ruby on Rails删除了仍在Heroku上运行的迁移

时间:2013-04-12 00:58:55

标签: ruby-on-rails git heroku migration rake

因此,在开发过程的某个阶段,我添加了一个迁移,以向我的users表中添加一列。此列添加了“dollar”属性。之后,我决定通过编写删除迁移来删除“dollars”属性。我后来不小心删除了初始迁移以添加美元,因此为了解决我在本地SQLite数据库上运行db:migrate时遇到的错误,我还删除了RemoveDollarsFromUsers迁移。

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

所以我仔细检查了我的repo是最新的,它是,然后我试图完全重置并在heroku上启动一个新的应用程序,想想也许heroku正在记住旧的迁移。使用新的heroku应用程序,我得到了同样的错误,即使我推送的repo根本不应该对旧的迁移文件有任何引用。

这是一个git问题吗?我唯一能想到的是git正在推动使用RemoveDollarsFromUsers迁移的旧版本,否则heroku怎么可能知道呢?

1 个答案:

答案 0 :(得分:3)

因此,迁移会记录在架构迁移表中,并指定在运行rake db:migrate甚至db:resetdb:setup时要运行的点。

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

回归基础的最简单方法是在db/schema.rb之间创建新的迁移和副本(使其反映出您希望的内容)。然后,您可以删除其他迁移,删除数据库,然后运行新迁移。

请务必先备份您不想丢失的任何内容!