Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 带彪马的钢轨偶尔超时_Ruby On Rails_Nginx_Capistrano_Puma - Fatal编程技术网

Ruby on rails 带彪马的钢轨偶尔超时

Ruby on rails 带彪马的钢轨偶尔超时,ruby-on-rails,nginx,capistrano,puma,Ruby On Rails,Nginx,Capistrano,Puma,我在远程服务器上有两个Rails应用程序(生产和暂存环境) 我目前遇到一个奇怪的问题,Puma有时会在我完成部署(通过cap部署)后给我超时。这种情况已经发生了相当长的一段时间,而且越来越频繁。无论何时发生这种情况,我都需要重新启动Puma服务器(从cap Puma:stop和cap Puma:start),或者手动执行kill-9。但是,在这两种情况下,我首先需要从shared/tmp/sockets目录rm puma.sock 另一方面,我的生产环境没有遇到这个问题。它们之间的区别只是提交次

我在远程服务器上有两个Rails应用程序(生产和暂存环境)

我目前遇到一个奇怪的问题,Puma有时会在我完成部署(通过cap部署)后给我超时。这种情况已经发生了相当长的一段时间,而且越来越频繁。无论何时发生这种情况,我都需要重新启动Puma服务器(从
cap Puma:stop
cap Puma:start
),或者手动执行
kill-9
。但是,在这两种情况下,我首先需要从
shared/tmp/sockets
目录
rm puma.sock

另一方面,我的生产环境没有遇到这个问题。它们之间的区别只是提交次数,我的暂存环境是前面几次(约50次)提交。早些时候,当我将暂存合并到生产并部署时,生产中也出现了同样的问题。因此,我将我的产品回滚到以前的版本,重新启动Puma,问题就消失了

注意:
cappuma:restart
不知何故无法解决此问题;我必须杀死当前的Puma实例,并启动一个新实例,以解决此问题

我当前的设置是:

  • 轨道4.1
  • 美洲狮
  • Nginx
  • 卡皮斯特拉诺3
发生错误时,Rails日志中没有任何内容,但Nginx记录了一些错误:

  • 上游超时(110:连接超时)从上游读取响应头时等待60秒后,显示500页。
  • recv()从上游读取响应头时失败(104:对等方重置连接)
    页面立即显示500个响应头。
  • connect()到unix:/var/deploy/medictrust staging/shared/tmp/sockets/puma.sock在连接到上游时失败(111:连接被拒绝)
    立即显示500页。
上述误差是随机发生的;有时连接超时,有时连接被拒绝。。但最常见的是连接超时

奇怪的是,如果我通过cURL访问我的应用程序,Puma并没有超时。Puma或Nginx配置中未进行任何更改,因此这是否可能是由应用程序代码引起的


如何使这个问题永远消失?

对我来说,web服务器超时是因为数据库中到处都是长时间运行的查询,这占用了可用的连接,并使Puma等待新的连接可用

作为急救,我重新启动了我的MySQL服务器,它立即工作。我很遗憾没有记录慢速查询;因为那个查询一定是我的Rails应用程序中一些错误代码的结果


此外,这个答案也很有帮助:

你有没有想过这个答案?我正在处理类似的事情,但只是在我的生产环境中。嘿@steel,如果我没记错的话,web服务器超时是因为数据库中到处都是长时间运行的(读取:卡住)查询。可用的数据库池已耗尽,Puma一直在等待卡住的查询完成。要检查我的问题是否与您的类似,只需登录生产数据库并运行
SHOW FULL PROCESSLIST
。以下是一个帮助我的答案: