Ruby on rails 在通过PGBACKUP进行恢复后,为什么会出现“很抱歉,出现了一些问题”。无需迁移即可恢复

Ruby on rails 在通过PGBACKUP进行恢复后,为什么会出现“很抱歉,出现了一些问题”。无需迁移即可恢复,ruby-on-rails,git,postgresql,heroku,Ruby On Rails,Git,Postgresql,Heroku,这件事我花了一段时间才弄明白。这是一个相当棘手的问题,看起来像是Heroku中的一个bug,所以我会发布我自己的答案,以防它对某人有所帮助 情景: 使用postgresql适配器的Rails应用程序在本地主机上运行良好。 所有迁移都已完成。 通过git push Heroku master部署到Heroku成功更新了Heroku实例。 Heroku PGBackups插件已安装且工作正常。 pg_dump用于生成本地db dump,并将文件上载到可访问的internet位置。 问题: 跑步后 h

这件事我花了一段时间才弄明白。这是一个相当棘手的问题,看起来像是Heroku中的一个bug,所以我会发布我自己的答案,以防它对某人有所帮助

情景:

使用postgresql适配器的Rails应用程序在本地主机上运行良好。 所有迁移都已完成。 通过git push Heroku master部署到Heroku成功更新了Heroku实例。 Heroku PGBackups插件已安装且工作正常。 pg_dump用于生成本地db dump,并将文件上载到可访问的internet位置。 问题:

跑步后

heroku pgbackups:restore DATABASE_URL 'http://mywebsite.com/pgbackup.dump'
我收到了一条出错的信息。奇怪的是,考虑到发生的只是一个数据库负载,一个数据在本地机器上运行良好的数据库。未执行任何迁移,以前已提交所有内容,没有代码更新。。。只有数据库中的数据发生了更改,那么,如果数据库中的数据发生了更改,为什么应用程序不再工作

检查heroku日志显示,它找不到明确存在的表。行,如:

 ActionView::Template::Error (PG::UndefinedTable: ERROR:  relation "users" does not exist 
使用heroku pg:psql进行验证只会让情况变得更加奇怪,因为从用户处执行select*会带来真正的结果。即使在这个阶段执行heroku重启也无法解决这个问题。我还尝试了与heroku pg:reset和heroku运行rake db:migrate的组合

为什么更新数据库中的数据会关闭应用程序?

解决方案:

运行pgbackups:restore作为最初的目标,并获取错误信息。 运行heroku重新启动。 运行heroku pg:psql利润。 出于某种原因,在pg:restore之后数据库工作之前,似乎有必要重新启动pg:psql

尽管pg:psql会很高兴地显示表确实在那里,而不是日志消息,但在dyno重新启动之前,应用程序不会工作,直到您使用pg:psql时,应用程序才会工作


据我所知,pg:psql只建立了到远程数据库的连接,并且不应该对数据库服务器的状态产生任何影响,尽管它看起来是这样的

我曾经有过类似的奇怪行为,它似乎与重命名的表上的自动id索引有关。对于我来说,pg:在加载转储文件后立即重置就可以实现。听起来你可能已经试过了,但以防万一……或者,使用pg extras插件来安装Heroku:Heroku插件:安装git://github.com/heroku/heroku-pg-extras.git 然后使用heroku pg:push localdbname DATABASE将本地数据库推送到heroku pg db。更多信息