3

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

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

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

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

4

1 回答 1

3

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

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

返回基础的最简单方法是创建一个新的迁移并复制db/schema.rb(使其反映您想要的样子)。然后,您可以删除其他迁移,删除数据库,然后运行新的迁移。

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

于 2013-04-12T04:18:35.763 回答