Elastic Beanstalk 上的 502 错误网关 nginx + puma + rails 3.2
502 bad gateway nginx + puma + rails 3.2 on Elastic Beanstalk
部署成功,一切正常。但是当我们尝试访问应用程序 URL 时,它给出 502 Bad Gateway
错误。
使用 ps -aux | grep puma
检查 puma 进程不会 return 任何附加到 puma 服务器的进程,但 pgrep
return 紧随其后。
$pgrep -fl puma
18009 su -s /bin/bash -c bundle exec puma -C /opt/elasticbeanstalk/support/conf/pumaconf.rb webapp
18031 ruby /opt/rubies/ruby-2.0.0-p598/bin/puma -C /opt/elasticbeanstalk/support/conf/pumaconf.rb
我已经尝试了所有可能的组合,如 forum/blog 或 nginx/puma 的支持站点所示。以下是状态。
- 默认配置 - 我们在 nginx.conf 和 pumaconf.rb 的 UPSTREAM 选项中使用了 UNIX:// sock 文件 - 这给出了 502 错误的网关。检查后,puma 未 运行ning,它每 3 分钟重新启动一次。
- 正如我们在 DigitalOcean 中使用的那样 - 将上面的 UPSTREAM conf URL 更改为 pumaconf.rb 中的 tcp://127.0.0.1:3000 和 conf.[= 中的 127.0.0.1:3000 52=.conf 文件。 - 这也不起作用,puma 无法 运行 与上面相同。
我的问题是,
- 为什么无法控制 运行ning puma with diff。配置?为什么我们必须始终使用 UI,它无法按照其他标准配置选项正确地 运行 服务?
- 从 UI 到 change/verify 从 UI 没有配置选项。所以我们必须从 SSH 进行。但是,我们无法控制从控制台重新启动 PUMA。
- 只要 puma 未 运行ning,我们就无法看到它所面临错误的任何日志。这真的一点用都没有。
即使使用默认配置,Puma 也无法 运行,因此 nginx 无法与 Puma 通信,因此 EC2 没有任何意义!
如果您对此有任何想法,请告诉我们如何解决这个问题。
看到这个 - https://forums.aws.amazon.com/thread.jspa?messageID=608148򔞔
这个还是没有答案,这就像我们的手被铐住了,不能改变任何配置!
更新
AWS 以某种方式停止和启动 PUMA,因为我可以在检查 ps -ef|grep puma
时看到进程 ID 发生变化。所以,我启动了 puma 在另一个端口上工作,并试图检查它是否 运行s。
从另一个端口开始,然后从另一个控制台使用 wget http://127.0.0.1:3000
访问 URL。它打印以下日志。
current]$ bundle exec puma -b tcp://127.0.0.1:3001
Puma 2.0.1 starting...
* Min threads: 0, max threads: 16
* Environment: production
* Listening on tcp://127.0.0.1:3001
Rails Error: Unable to access log file. Please ensure that /var/app/current/log/production.log exists and is chmod 0666. The log level has been raised to WARN and the output directed to STDERR until the problem is fixed.
Use Ctrl-C to stop
2015-03-16 13:19:35 +0000: HTTP parse error, malformed request (): #<Puma::HttpParserError: Invalid HTTP format, parsing fails.>
2015-03-16 13:19:35 +0000: ENV: {"rack.version"=>[1, 1], "rack.errors"=>#<IO:<STDERR>>, "rack.multithread"=>true, "rack.multiprocess"=>false, "rack.run_once"=>false, "SCRIPT_NAME"=>"", "CONTENT_TYPE"=>"text/plain", "QUERY_STRING"=>"", "SERVER_PROTOCOL"=>"HTTP/1.1", "SERVER_SOFTWARE"=>"2.0.1", "GATEWAY_INTERFACE"=>"CGI/1.2"}
那么,使用 SSL 是强制性的吗?因为我觉得默认是没有启用的。
我无法解决这个问题。此外,我们应该只使用 EC2 免费实例而不是 BeanStalk。
我们现在已经转移到带有 RDS 的免费 EC2 实例,并使用 Capistrano 和 Nginx + Unicorn 部署了 rails 应用程序。虽然不容易[1]但我们终于成功了。
我在上传 rails 应用程序后遇到了这个问题,我在 secrets.yml (config > secrets.yml) :secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
因此您必须将其作为环境变量添加到您的环境中。
在环境仪表板中,转到 配置 > 软件 > 环境属性 并添加名称为 SECRET_KEY_BASE.
的新变量
您可以设置任何值,但要确保它是一个安全密钥。
这解决了我的问题,希望对您有所帮助。
部署成功,一切正常。但是当我们尝试访问应用程序 URL 时,它给出 502 Bad Gateway
错误。
使用 ps -aux | grep puma
检查 puma 进程不会 return 任何附加到 puma 服务器的进程,但 pgrep
return 紧随其后。
$pgrep -fl puma
18009 su -s /bin/bash -c bundle exec puma -C /opt/elasticbeanstalk/support/conf/pumaconf.rb webapp
18031 ruby /opt/rubies/ruby-2.0.0-p598/bin/puma -C /opt/elasticbeanstalk/support/conf/pumaconf.rb
我已经尝试了所有可能的组合,如 forum/blog 或 nginx/puma 的支持站点所示。以下是状态。
- 默认配置 - 我们在 nginx.conf 和 pumaconf.rb 的 UPSTREAM 选项中使用了 UNIX:// sock 文件 - 这给出了 502 错误的网关。检查后,puma 未 运行ning,它每 3 分钟重新启动一次。
- 正如我们在 DigitalOcean 中使用的那样 - 将上面的 UPSTREAM conf URL 更改为 pumaconf.rb 中的 tcp://127.0.0.1:3000 和 conf.[= 中的 127.0.0.1:3000 52=.conf 文件。 - 这也不起作用,puma 无法 运行 与上面相同。
我的问题是,
- 为什么无法控制 运行ning puma with diff。配置?为什么我们必须始终使用 UI,它无法按照其他标准配置选项正确地 运行 服务?
- 从 UI 到 change/verify 从 UI 没有配置选项。所以我们必须从 SSH 进行。但是,我们无法控制从控制台重新启动 PUMA。
- 只要 puma 未 运行ning,我们就无法看到它所面临错误的任何日志。这真的一点用都没有。
即使使用默认配置,Puma 也无法 运行,因此 nginx 无法与 Puma 通信,因此 EC2 没有任何意义!
如果您对此有任何想法,请告诉我们如何解决这个问题。
看到这个 - https://forums.aws.amazon.com/thread.jspa?messageID=608148򔞔
这个还是没有答案,这就像我们的手被铐住了,不能改变任何配置!
更新
AWS 以某种方式停止和启动 PUMA,因为我可以在检查 ps -ef|grep puma
时看到进程 ID 发生变化。所以,我启动了 puma 在另一个端口上工作,并试图检查它是否 运行s。
从另一个端口开始,然后从另一个控制台使用 wget http://127.0.0.1:3000
访问 URL。它打印以下日志。
current]$ bundle exec puma -b tcp://127.0.0.1:3001
Puma 2.0.1 starting...
* Min threads: 0, max threads: 16
* Environment: production
* Listening on tcp://127.0.0.1:3001
Rails Error: Unable to access log file. Please ensure that /var/app/current/log/production.log exists and is chmod 0666. The log level has been raised to WARN and the output directed to STDERR until the problem is fixed.
Use Ctrl-C to stop
2015-03-16 13:19:35 +0000: HTTP parse error, malformed request (): #<Puma::HttpParserError: Invalid HTTP format, parsing fails.>
2015-03-16 13:19:35 +0000: ENV: {"rack.version"=>[1, 1], "rack.errors"=>#<IO:<STDERR>>, "rack.multithread"=>true, "rack.multiprocess"=>false, "rack.run_once"=>false, "SCRIPT_NAME"=>"", "CONTENT_TYPE"=>"text/plain", "QUERY_STRING"=>"", "SERVER_PROTOCOL"=>"HTTP/1.1", "SERVER_SOFTWARE"=>"2.0.1", "GATEWAY_INTERFACE"=>"CGI/1.2"}
那么,使用 SSL 是强制性的吗?因为我觉得默认是没有启用的。
我无法解决这个问题。此外,我们应该只使用 EC2 免费实例而不是 BeanStalk。
我们现在已经转移到带有 RDS 的免费 EC2 实例,并使用 Capistrano 和 Nginx + Unicorn 部署了 rails 应用程序。虽然不容易[1]
我在上传 rails 应用程序后遇到了这个问题,我在 secrets.yml (config > secrets.yml) :secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
因此您必须将其作为环境变量添加到您的环境中。
在环境仪表板中,转到 配置 > 软件 > 环境属性 并添加名称为 SECRET_KEY_BASE.
的新变量您可以设置任何值,但要确保它是一个安全密钥。 这解决了我的问题,希望对您有所帮助。