删除迁移后如何在rails中修复数据库?

时间:2013-02-19 17:42:57

标签: ruby-on-rails heroku rails-migrations

好的,这就是发生的事情:

1)我需要在表中添加一列,但不是生成迁移,而是手工编写。我给它的文件名似乎工作正常,但没有时间戳,所以事情变坏了。

2)经过多年的讨论后,我更新了schema.rb文件,使其看起来像我想要的那样。然后我重置数据库。那很好但是......

3)当我去运行迁移时,最后几个已经运行,所以它认为它们是重复的。所以我删除了所有的迁移,因为架构看起来很好,一切都运行良好。

4)但是现在它在我的本地机器上运行正常但是当我尝试部署到Heroku时我遇到了真正的问题,Heroku似乎可以访问我的旧迁移,并且否认存在一个明显存在的表。我重置了很多次。

那么,有什么方法可以重新开始使用模式并且没有迁移并让系统忘记曾经有过迁移吗?或者,如果我创建两个包含所有相关表数据的新迁移,该怎么办?

编辑:这是我从heroku日志中获得的。基本上它让我进入登录页面,但当我尝试登录时会发生这种情况。

在2013-02-19 18:27:01 +0000开始获取89.27.92.12的“/ home” 2013-02-19T18:27:01 + 00:00 app [web.1]: 2013-02-19T18:27:01 + 00:00 app [web.1]:由MaterialsController#home作为HTML处理 2013-02-19T18:27:01 + 00:00 app [web.1]:在26ms内完成500内部服务器错误 2013-02-19T18:27:01 + 00:00 app [web.1]: 2013-02-19T18:27:01 + 00:00 app [web.1]:ActiveRecord :: StatementInvalid(PGError:ERROR:关系“材料”不存在 2013-02-19T18:27:01 + 00:00 app [web.1]:第4行:a.attrelid ='“材料”':: regclass 2013-02-19T18:27:01 + 00:00 app [web.1]:^ 2013-02-19T18:27:01 + 00:00 app [web.1]:FROM pg_attribute a LEFT JOIN pg_attrdef d 2013-02-19T18:27:01 + 00:00 app [web.1] :: SELECT a.attname,format_type(a.atttypid,a.atttypmod),d.adsrc,a.attnotnull 2013-02-19T18:27:01 + 00:00 app [web.1]:WHERE a.attrelid ='“materials”':: regclass 2013-02-19T18:27:01 + 00:00 app [web.1]:和a.attnum> 0而不是a.attisdropped 2013-02-19T18:27:01 + 00:00 app [web.1]:ON a.attrelid = d.adrelid AND a.attnum = d.adnum 2013-02-19T18:27:01 + 00:00 app [web.1] :): 2013-02-19T18:27:01 + 00:00 app [web.1]:app / controllers / materials_controller.rb:11:在`get_materials'中 2013-02-19T18:27:01 + 00:00 app [web.1]:a.attnum订购

1 个答案:

答案 0 :(得分:1)

这听起来真的搞砸了!

PGError: ERROR: relation "materials" does not exist明确指出架构中缺少此表。

您可以直接查看数据库来查看当前的迁移状态:ActiveRecord::Base.connection.execute("SELECT * from schema_migrations").map(&:to_s)

你也可以转储数据库并查看localy:https://devcenter.heroku.com/articles/heroku-postgres-import-export