0

这个我花了一段时间才弄清楚。这非常棘手,似乎是 Heroku 中的一个错误,所以我会发布我自己的答案,以防它对某人有所帮助。

场景

  • 使用 postgresql 适配器的 Rails 应用程序在 localhost 上运行良好。
  • 所有迁移都已完成。
  • 通过“git push heroku master”部署到 Heroku 成功更新 Heroku 实例。
  • Heroku PGBackups 插件已安装并且工作正常。
  • pg_dump 用于生成本地数据库转储,并将文件上传到可访问的 Internet 位置。

问题

运行后

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在这个阶段执行 a 也不会解决问题。我还尝试了将其与heroku pg:reset和结合使用heroku run rake db:migrate

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

4

1 回答 1

0

解决方案:

  1. pgbackups:restore按照最初的预期运行(并得到错误)。
  2. 运行heroku restart
  3. 运行heroku pg:psql(利润)。

出于某种原因,似乎有restart必要pg:psqlpg:restore.

尽管pg:psql会很高兴地显示表格确实存在(与日志消息相反),但该应用程序在重新启动测功机之前将无法运行(然后它仍然无法运行),直到您pg:psql.

据我所知,pg:psql只建立到远程数据库的连接,并且不应该对数据库服务器的状态产生任何影响(尽管看起来确实如此)。

于 2013-09-27T09:21:58.427 回答