Elastic Beanstalk上的502坏网关nginx + puma + rails 3.2

时间:2015-03-16 07:29:56

标签: ruby-on-rails nginx elastic-beanstalk puma

部署成功,一切都是绿色的。但是,当我们尝试访问应用程序网址时,会出现502 Bad Gateway错误。

使用ps -aux | grep puma检查美洲狮进程不会返回附加到puma服务器的任何进程,但pgrep会返回以下内容。

$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

3 个答案:

答案 0 :(得分:2)

我已尝试过所有可能的组合,如nginx / puma的所有其他论坛/博客或支持网站所示。以下是状态。

  1. 默认配置 - 我们有UNIX://在nginx.conf和pumaconf.rb的UPSTREAM选项中使用的sock文件 - 这会给出502错误的gatway。选中后,puma没有运行,并且每隔3分钟重启一次。
  2. 正如我们在DigitalOcean中使用它 - 将上述UPSTREAM配置URL更改为pumaconf.rb中的tcp://127.0.0.1:3000和conf.d / webapp.conf文件中的127.0.0.1:3000。 - 这也行不通,puma无法像上面那样正常运行。
  3. 我的问题是,

    1. 为什么没有控制与diff运行puma。配置?为什么我们必须始终使用UI,因为根据其他标准配置选项无法正常运行服务?
    2. UI中没有用于从UI更改/验证的配置选项。所以我们必须从SSH做到这一点。但是,我们无法控制从控制台重启PUMA。
    3. 每当puma没有运行时,我们都无法看到它所面临的错误的任何日志。这根本没有用。
    4. Puma即使使用默认配置也无法运行,因此nginx无法与Puma交谈,所以EC2真的没有意义!

      如果您对此有任何疑问,请告知我们如何解决此问题。

      请参阅此内容 - https://forums.aws.amazon.com/thread.jspa?messageID=608148&#608148

      在这个问题上仍然没有答案,这就像我们的手被铐了一样,无法改变任何配置!

      <强>更新

      AWS以某种方式停止并启动PUMA,因为我在查看ps -ef|grep puma时可以看到进程ID发生变化。所以,我开始使用puma在另一个端口上工作并尝试检查它是否运行。

      在另一个端口上启动,然后从另一个使用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?因为我认为默认情况下它没有启用。

答案 1 :(得分:0)

上传我的rails应用后遇到此问题,我在secrets.yml( config &gt; secrets.yml )上找到了此行(自动生成):{{ 1}}

因此您必须将其作为环境变量添加到您的环境中。

在环境信息中心转到配置&gt; 软件&gt; 环境属性并添加名为 SECRET_KEY_BASE 的新变量。

您可以设置任何值,但请确保它是安全密钥。 这解决了我的问题,我希望它有所帮助。

答案 2 :(得分:-1)

我无法解决这个问题。我们也应该只使用EC2 free实例而不是BeanStalk。

我们现在已经转移到使用RDS的Free EC2实例,并使用Capistrano和Nginx + Unicorn部署了rails应用程序。虽然这不容易[1] [2]但最终我们得到了它。