使用Puma在Elastic Beanstalk上部署的Rails应用程序失败 - 每个请求都有502个错误

chi*_*ikh 16 ruby-on-rails nginx amazon-ec2 puma amazon-elastic-beanstalk

我刚刚将一个Rails应用程序部署到Elastic Beanstalk,每个请求都给我一个502错误.

这是/var/logs/nginx/error.log的内容

2015/05/20 16:24:25 [warn] 1535#0: conflicting server name "localhost" on 0.0.0.0:80, ignored
2015/05/20 16:27:12 [crit] 1537#0: *20 connect() to unix:///var/run/puma/my_app.sock failed (2: No such file or directory) while connecting to upstream, client: 172.31.51.94, server: _, request: "POST /get HTTP/1.1", upstream: "http://unix:///var/run/puma/my_app.sock:/get", host: "securities-api-prod.elasticbeanstalk.com"
2015/05/20 16:27:17 [crit] 1537#0: *20 connect() to unix:///var/run/puma/my_app.sock failed (2: No such file or directory) while connecting to upstream, client: 172.31.51.94, server: _, request: "POST /get HTTP/1.1", upstream: "http://unix:///var/run/puma/my_app.sock:/get", host: "securities-api-prod.elasticbeanstalk.com"
2015/05/20 16:27:19 [crit] 1537#0: *20 connect() to unix:///var/run/puma/my_app.sock failed (2: No such file or directory) while connecting to upstream, client: 172.31.51.94, server: _, request: "POST /get HTTP/1.1", upstream: "http://unix:///var/run/puma/my_app.sock:/get", host: "securities-api-prod.elasticbeanstalk.com"
2015/05/20 16:27:22 [crit] 1537#0: *16 connect() to unix:///var/run/puma/my_app.sock failed (2: No such file or directory) while connecting to upstream, client: 172.31.44.210, server: _, request: "GET /datapoint?tickers=AAPL&datapoints=Ratings HTTP/1.1", upstream: "http://unix:///var/run/puma/my_app.sock:/datapoint?tickers=AAPL&datapoints=Ratings", host: "securities-api-prod.elasticbeanstalk.com"
2015/05/20 16:27:27 [crit] 1537#0: *20 connect() to unix:///var/run/puma/my_app.sock failed (2: No such file or directory) while connecting to upstream, client: 172.31.51.94, server: _, request: "POST /get HTTP/1.1", upstream: "http://unix:///var/run/puma/my_app.sock:/get", host: "securities-api-prod.elasticbeanstalk.com"
2015/05/20 16:27:32 [crit] 1537#0: *20 connect() to unix:///var/run/puma/my_app.sock failed (2: No such file or directory) while connecting to upstream, client: 172.31.51.94, server: _, request: "POST /get HTTP/1.1", upstream: "http://unix:///var/run/puma/my_app.sock:/get", host: "securities-api-prod.elasticbeanstalk.com"
2015/05/20 16:28:53 [crit] 1537#0: *52 connect() to unix:///var/run/puma/my_app.sock failed (2: No such file or directory) while connecting to upstream, client: 172.31.51.94, server: _, request: "GET /datapoint?tickers=AAPL&datapoints=Ratings HTTP/1.1", upstream: "http://unix:///var/run/puma/my_app.sock:/datapoint?tickers=AAPL&datapoints=Ratings", host: "securities-api-prod.elasticbeanstalk.com"
2015/05/20 16:30:47 [crit] 1537#0: *69 connect() to unix:///var/run/puma/my_app.sock failed (2: No such file or directory) while connecting to upstream, client: 172.31.51.94, server: _, request: "POST /get HTTP/1.1", upstream: "http://unix:///var/run/puma/my_app.sock:/get", host: "securities-api-prod.elasticbeanstalk.com"
Run Code Online (Sandbox Code Playgroud)

我认为美洲狮正在运行 -

[ec2-user@ip-172-31-44-135 nginx]$ ps aux | grep puma
root     23299  1.0  0.2  53008  1428 ?        Ss   16:38   0:00 su -s /bin/bash -c puma -C /opt/elasticbeanstalk/support/conf/pumaconf.rb webapp
webapp   23314  0.0  2.4  75764 14604 ?        Rsl  16:38   0:00 /opt/rubies/ruby-2.1.4/bin/ruby /opt/rubies/ruby-2.1.4/bin/puma -C /opt/elasticbeanstalk/support/conf/pumaconf.rb
ec2-user 23317  0.0  0.1 110284   844 pts/0    S+   16:38   0:00 grep puma
Run Code Online (Sandbox Code Playgroud)

pumaconf.rb

directory '/var/app/current'
threads 8, 32
workers %x(grep -c processor /proc/cpuinfo)
bind 'unix:///var/run/puma/my_app.sock'
stdout_redirect '/var/log/puma/puma.log', '/var/log/puma/puma.log', true
daemonize false
Run Code Online (Sandbox Code Playgroud)

有谁知道发生了什么?

aks*_*aks 12

我遇到了同样的错误并添加了这两行来config/puma.rb解决问题:

bind "unix:///var/run/puma/my_app.sock"
pidfile "/var/run/puma/my_app.sock"
Run Code Online (Sandbox Code Playgroud)

在此步骤之后,我面临另一个错误,即添加ENV值,这非常简单.

希望这可以帮助.


Mic*_*ehr 6

抱歉 - 比赛太晚了。但我在搜索相同的错误消息时发现了此条目,并且可以以不同的方式解决它。

我试图让 Rails 6.1.1(当前最新和最好的)应用程序在 AWS Beanstalk(带有 Ruby 2.6 的 Puma)上运行,我得到了与这篇文章中描述的相同的错误:Nginx throwing 上述连接错误/Puma 似乎没有反应(puma 日志中没有条目)/当通过 SSH 连接到计算机时,它显示 Puma 正在运行(initctl status puma-> 显示进程 ID)。

经过几天的研究(并尝试了上述所有答案但没有成功) - 我切换到乘客 - 但结果仍然相同。针对 Passenger 研究同样的问题,找到了正确的解决方案:

当您想使用 AWS 平台分支已提供的应用程序服务器(“Puma with Ruby 2.6...”或“Passenger with Ruby 2.6...”)时,请勿在生产中使用应用程序服务器的 gem(不知何故)与已安装的版本冲突)。因此在你的 Gemfile 中:

gem 'puma', '~> 5.0', groups: [:development, :test]
Run Code Online (Sandbox Code Playgroud)

分别:

gem "passenger", ">= 5.3.2", require: "phusion_passenger/rack_handler", groups: [:development, :test]
Run Code Online (Sandbox Code Playgroud)

或在尚未安装应用程序服务器的情况下使用 AWS Beanstalk 平台(“Ruby 2.6 运行于...)

PS:似乎只是更高 Rails 版本的解决方案(我的旧 Rails 5.1 应用程序可以在“Puma with Ruby 2.6”平台上完美运行,即使“正常”安装了 gem。

  • 这为我解决了问题。在过去的 5 个小时里,我尝试将 Rails 6.1.3.2 应用程序部署到 Beanstalk 平台 Ruby 2.6.7 和 Puma,这是唯一有帮助的。非常感谢迈克尔! (3认同)

Sta*_*hin 0

日志文件中的这一行意味着您的 nginx 配置不正确。

upstream: "http://unix:///var/run/puma/my_app.sock:/get"
Run Code Online (Sandbox Code Playgroud)

实际上nginx尝试使用unix域套接字作为HTTP url。

如果没有它,无法准确说出你的 nginx 配置出了什么问题,但你应该有这样的东西:

upstream backend {
  server backend1.example.com weight=5;
  server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;
  server unix:/tmp/backend3;

  server backup1.example.com  backup; 
}
Run Code Online (Sandbox Code Playgroud)

您还应该查看此 nginx 文档http://nginx.org/en/docs/http/ngx_http_upstream_module.html