0

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

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

2)在搞砸了很长时间之后,我更新了 schema.rb 文件,使它看起来像我想要的那样。然后我重置数据库。那很好,但是...

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

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

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

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

2013-02-19 18:27:01 +0000 2013-02-19T18:27:01+00:00 app[web.1]: 2013-02-19T18:27 开始为 89.27.92.12 获取“/home” :01+00:00 app[web.1]: MaterialsController#home 处理为 HTML 2013-02-19T18:27:01+00:00 app[web.1]: Completed 500 Internal Server Error in 26ms 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]: LINE 4: WHERE a.attrelid = '"materials"'::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]: AND a.attnum > 0 AND NOT 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:in `get_materials' 2013-02-19T18:27:01+00:00 app[web.1]: ORDER BY a.attnumattnum = 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:in `get_materials' 2013-02-19T18:27:01+00:00 app[web.1]: ORDER BY a.attnumattnum = 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:in `get_materials' 2013-02-19T18:27:01+00:00 app[web.1]: ORDER BY a.attnum

4

1 回答 1

1

这听起来真的很糟糕!

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

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

您还可以转储数据库并在本地查看:https ://devcenter.heroku.com/articles/heroku-postgres-import-export

于 2013-02-19T19:48:00.450 回答