这个花了我一段时间才弄明白。它非常棘手,看起来像Heroku中的一个bug,所以我会发布自己的答案以防万一。
方案:
问题:
运行后
heroku pgbackups:restore DATABASE_URL 'http://mywebsite.com/pgbackup.dump'
我收到“出错了”的消息。奇怪的是,考虑到所发生的一切是数据库加载,一个数据库,其数据在本地机器上正常工作。没有执行任何迁移,之前已经提交了所有内容,没有代码更新......只更改了数据库中的数据,为什么只要数据库中的数据发生更改,应用程序就不再有效了?
检查heroku logs
表示找不到明显的表格。像这样的行:
ActionView::Template::Error (PG::UndefinedTable: ERROR: relation "users" does not exist
使用heroku pg:psql
进行验证只会使情况更加陌生,因为执行select * from users
会带来真实的结果。即使在此阶段执行heroku restart
也无法解决问题。我还尝试将其与heroku pg:reset
和heroku run rake db:migrate
组合在一起。
为什么更新数据库中的数据会关闭应用程序?
答案 0 :(得分:0)
解决方案:
pgbackups:restore
(并获取错误)。heroku restart
。heroku pg:psql
(利润)。出于某种原因,在数据库在restart
之后工作之前,似乎需要pg:psql
然后pg:restore
。
即使pg:psql
很乐意显示表确实在那里(与日志消息相反),在重启dyno之前应用程序将无法运行(然后它仍然无效),而不是直到你pg:psql
。
据我所知,pg:psql
只建立了与远程数据库的连接,并且不应该对数据库服务器的状态产生任何影响(尽管看起来确实如此)。