【问题标题】:Rails + Puma + Nginx Every couple of days Bad Gateway 502Rails + Puma + Nginx 每隔几天 Bad Gateway 502
【发布时间】:2015-10-14 06:36:50
【问题描述】:

我有一个使用 Puma 在 Nginx 上运行的 Rails 应用程序,就像发条一样,每隔几天应用程序就会出现 502 Bad Gateway 错误。

我的 nginx 日志包含很多这样的错误:

2015/07/23 14:43:49 [error] 14044#0: *7036 connect() to unix:///var/www/myapp/myapp_app.sock failed (111: Connection refused) while connecting to upstream, client: 12.123.12.12, server: myapp.com, request: "GET /arrangements HTTP/1.1", upstream: "http://unix:///var/www/myapp/myapp_app.sock:/arrangements", host: "myapp.com", referrer: "http://myapp.com/arrangements"

我必须重新启动 Puma,然后一切都会再次正常运行......几天。

有什么想法可以解决这个问题吗?我是 nginx 和 puma 的新手。

/etc/nginx/sites-enabled/myapp.com

upstream myapp {
                server unix:///var/www/myapp/myapp_app.sock;
        }
        server {
                listen 80;
                server_name myapp.com;
                root /var/www/myapp/current/public;
                client_max_body_size 20M;

                location ~ \.php$ {
                        try_files $uri =404;
                        fastcgi_pass unix:/var/run/php5-fpm.sock;
                        fastcgi_index index.php;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        include fastcgi_params;
                        allow all;
                        satisfy any;
                }

                location / {
                        proxy_pass http://myapp; # match the name of upstream directive which is defined above
                        proxy_set_header Host $host;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                }
                location ~* ^/assets/ {
                        # Per RFC2616 - 1 year maximum expiry
                        expires 1y;
                        add_header Cache-Control public;

                        # Some browsers still send conditional-GET requests if there's a
                        # Last-Modified header or an ETag header even if they haven't
                        # reached the expiry date sent in the Expires header.
                        add_header Last-Modified "";
                        add_header ETag "";
                        break;
                }
        }

【问题讨论】:

  • 您的应用是否在 Digital Ocean 上运行?
  • 您是否收到过来自 DO 的电子邮件?如果没有,我会发布一个。
  • 我得到了一些关于升级纽约市一些服务器的信息。这就是我记得的全部。
  • 比这更糟糕。我将在答案中发布文本,因为当我尝试将文本发布到此处的 cmets 时,格式完全乱码。
  • 当 connect() 返回 ECONNREFUSED 时,表明有问题的套接字由于某种原因未打开,这就是 nginx 返回 502 的原因。也就是说,您的后端 Puma 发生了一些事情。您应该查看您的后端日志以了解它发生了什么。

标签: ruby-on-rails nginx puma


【解决方案1】:

我不知道这个问题是否仍然相关,但对我解决这个确切问题有很大帮助的是将puma.sock 文件的实际位置移动到另一个目录。我选择了/tmp 目录。

该套接字曾经位于通过 NFS 安装到另一台服务器的驱动器上,我相信 是问题所在 - 网络中到处出现一些故障。我不确定它到底是什么,但自从我将puma.sock 移动到/tmp 后,所有问题都消失了。对我来说。

【讨论】:

  • 对我来说就是 Puma 本身。我与 Puma 的人一起工作,最终升级到 puma 2.15.x 或更高版本解决了这个问题。
【解决方案2】:

DigitalOcean 网络团队发现 NYC3 内的多个网络交换机上运行的固件存在问题。 此问题会导致与客户液滴的连接间歇性中断。

虽然该问题仅在一部分机架中得到确认,但我们将升级 NYC3 中运行受影响固件的所有交换机。随着单个交换机的升级,此维护将导致每个机架在维护窗口内的某个时间点停机大约 10 分钟。

维护窗口: 美国东部时间 2015 年 8 月 27 日 22:00 - 美国东部时间 2015 年 8 月 28 日 02:00 2015-08-28 02:00 UTC - 2015-08-28 06:00 UTC

对于给您带来的不便,我们深表歉意,并感谢您在我们努力提高网络可靠性时的耐心等待。


我会给它一两天,看看您遇到的问题是否再次出现,或者只是自行消失。

添加/编辑

附:我刚刚注意到电子邮件上的一个细节,

受影响的飞沫: railsbox00

如果您收到电子邮件,则说明您的 Droplet 受到固件问题的影响。检查您的电子邮件,看看他们是否列出了您的 VPS;它位于电子邮件的底部。

【讨论】:

  • 添加了 PS;电子邮件列出了受影响的液滴。
  • 它仍然会发生。它实际上已经发生了一年,我总是不得不重新启动 puma。我已经准备好摆脱这个问题的 puma b/c 了。
  • 那太糟糕了。固件错误有可能是罪魁祸首,对不起,这是一个真正的错误。我在我的 DO rails 服务器上运行 Unicorn,而不是 Puma,所以我没有任何 Puma 特定的洞察力。我没有看到独角兽有任何奇怪之处,但我知道人们选择不使用它是有一些原因的。安装和设置 unicorn 非常简单,只需尝试一下即可。
  • 阅读 Puma 我发现它现在是 Ruby on Rails 的“推荐网络服务器”。嗯。
  • 我知道,但我已经为这个问题苦苦挣扎了一年。似乎无法弄清楚。
猜你喜欢
  • 2015-05-18
  • 2020-04-22
  • 2016-09-14
  • 2015-07-25
  • 2023-03-20
  • 2018-04-23
  • 2021-02-24
  • 1970-01-01
  • 2022-08-16
相关资源
最近更新 更多