我最近向Heroku部署了一个rails应用程序,并开始随机获取超时。我目前正在使用专业的dyno,所以它不应该睡觉。它主要发生在一段时间不活动之后,然后第一个请求被挂起并超时。在第一个之后,它没问题。我也在使用New Relic来监控应用程序。当它在任何持续时间内监视可用性时,它会不断失败。即使我可以在浏览器上提取Web应用程序。它确实捕获的错误说问题出在呈现页面的控制器操作中。但是任何控制器中的任何动作都可能导致这种情况,只要它是在一段时间不活动后调用的第一个动作。我在代码中删除了一些跟踪器以确定问题所在。似乎第一个调用任何与SQL相关的代码都会挂起。新遗物说代码需要超过950,000 + mS才能完成。根据参数和会话cookie,它可以在操作中的不同点启动SQL查询。启动查询的第一行是New Relic所说的问题。我正在使用Mysql2 gem和ClearDB作为我的数据库。在开发过程中没有看到超时问题,可能是因为Heroku中的30秒超时。
编辑(18年2月7日): 在删除New Relic所说的挂起的代码之后,我没有代码执行与主页和控制器操作相关的任何SQL。我停止使用New Relics ping来确定正常运行时间。我反而使用Up-time Robot来检查网站。它证实了我怀疑新文物的监测是错误的。因此,没有任何SQL查询,它正在工作。我想改用PostgreSQL。 Heroku说他们正在帮助ClearDB。在我尝试其他任何事情之前,我都在等他们。
编辑(2/8/18):我切换到PostgreSQL。我遇到的所有问题都消失了。我仍然无法解释为什么MySQL会导致超时。