我在Heroku上使用Rails应用程序遇到一个非常奇怪的问题,即我已经有近一个月无法解决问题了。这是仅在生产服务器上发生的问题,我无法在开发中进行复制,并且该日志报告没有错误接受H18错误。
这就是正在发生的事情。该应用程序可以正常运行约12个小时,然后在某个时间点,请求数量会激增,Heroku开始报告常规的H18错误
在这一点上,应用程序并没有完全失败,但是所有调用某种open-uri请求的请求都将失败(基本上是对外部Web服务的请求),并返回500错误。仅显示静态视图的普通请求似乎仍然可以继续工作。
日志不是特别有用。
几乎每个H18错误都与对/robots.txt的请求相关联,但至少一个错误与资产请求相关联:“ / assets / application-38a4580edd72e30f34ea76583ab7e1b1b5654c72a6313ece935177d23b0398d3.css”
下面是摘录
Oct 10 21:09:32 lombardpress-web heroku/router: sock=backend at=error code=H18 desc="Server Request Interrupted" method=GET path="/robots.txt" host=scta.lombardpress.org request_id=e0e344d1-0349-4b0a-8db0-3c6e3ad3e99f fwd="157.55.39.188" dyno=web.1 connect=0ms service=209ms status=503 bytes= protocol=http
Oct 10 21:09:41 lombardpress-web heroku/router: sock=backend at=error code=H18 desc="Server Request Interrupted" method=GET path="/assets/application-38a4580edd72e30f34ea76583ab7e1b1b5654c72a6313ece935177d23b0398d3.css" host=scta.lombardpress.org request_id=fdd88ca2-140e-4051-9011-4d81ca218f19 fwd="157.55.39.206" dyno=web.1 connect=0ms service=252ms status=503 bytes= protocol=http
Oct 10 21:33:55 lombardpress-web heroku/router: sock=backend at=error code=H18 desc="Server Request Interrupted" method=GET path="/robots.txt" host=scta.lombardpress.org request_id=5aa463f5-43ff-4b74-a2de-e944aa9d2387 fwd="46.229.168.147" dyno=web.1 connect=0ms service=254ms status=503 bytes= protocol=http
Oct 10 21:38:23 lombardpress-web heroku/router: sock=backend at=error code=H18 desc="Server Request Interrupted" method=GET path="/robots.txt" host=scta.lombardpress.org request_id=2300949d-8998-4ed0-a4ab-bf1975e93cc6 fwd="216.244.66.197" dyno=web.1 connect=0ms service=220ms status=503 bytes= protocol=http
一旦错误开始,我只需要重新启动应用程序即可,对于另外12个左右的错误,一切都可以正常工作。甚至请求robots.txt。但是大约12小时后,会出现相同的问题。
由于网络爬虫的影响,我估计应用程序每2-4秒就会被请求打中。否则,它不是流量特别大的站点。
Heroku仅提供了最小的反馈
在后端返回HTTP响应之前,关闭了属于您应用程序的Web进程的后端套接字。这是在应用程序或Web服务器级别发生的,因此我们无法提供太多其他信息。您可以看到该请求在返回状态500之前花费了一段时间在您的应用程序服务中= 1118毫秒。我不知道中间件(也许您有一个在发出外部请求吗?)是否在它到达实际的rails堆栈之前就失败了。我建议从那里开始看。
该代码为开源代码,如果有人有兴趣在这里逛逛,可以在这里找到:https://github.com/lombardpress/lombardpress-web
如有任何想法或建议,我将不胜感激。我已经为此苦苦挣扎了一段时间,但不确定如何解决问题。