运行 Puma 和 Nginx 的带有 AWS Elastic Beanstalk 的 Rails 应用程序 502

Posted

技术标签:

【中文标题】运行 Puma 和 Nginx 的带有 AWS Elastic Beanstalk 的 Rails 应用程序 502【英文标题】:Rails app 502 with AWS Elastic Beanstalk running Puma & Nginx 【发布时间】:2014-07-05 02:05:52 【问题描述】:

我已经能够成功地让我的应用程序在 Beanstalk 上与 Passenger 一起运行,但是我在 Puma 上没有运气。每当我部署到 Puma 堆栈时,我都会收到 502 错误,我的日志文件表明它找不到 puma sock 文件:

2014/05/15 21:00:15 [crit] 1684#0: *4 connect() to unix:///var/run/puma/my_app.sock failed (2: No such file or directory) while connecting to upstream, client: 10.184.156.117, server: _, request: "GET / HTTP/1.1", upstream: "http://unix:///var/run/puma/my_app.sock:/", host: "app-env-89spnxpcai.elasticbeanstalk.com"

我的应用是使用 Ruby ruby​​ 2.0.0p451 和 Rails 4.1.1 构建的

我的 .ebextensions 配置如下所示

packages:
  yum:
    git: []

commands:
  add_bundle_exec:
    test: test ! -f /opt/elasticbeanstalk/support/.post-provisioning-complete
    cwd: /opt/elasticbeanstalk/hooks/appdeploy/pre
    command: perl -pi -e 's/(rake)/bundle exec $1/' 11_asset_compilation.sh 12_db_migration.sh
  add_deployment_flag:
    test: test ! -f /opt/elasticbeanstalk/support/.post-provisioning-complete
    cwd: /opt/elasticbeanstalk/hooks/appdeploy/pre
    command: perl -pi -e 's/(bundle install)/$1 --deployment/' 10_bundle_install.sh
  make_vendor_bundle_dir:
    test: test ! -f /opt/elasticbeanstalk/support/.post-provisioning-complete
    command: mkdir /var/app/support/vendor_bundle
  set_vendor_bundle_var:
    test: test ! -f /opt/elasticbeanstalk/support/.post-provisioning-complete
    cwd: /opt/elasticbeanstalk/support
    command: sed -i '12iexport EB_CONFIG_APP_VENDOR_BUNDLE=$EB_CONFIG_APP_SUPPORT/vendor_bundle' envvars
  symlink_vendor_bundle:
    test: test ! -f /opt/elasticbeanstalk/support/.post-provisioning-complete
    cwd: /opt/elasticbeanstalk/hooks/appdeploy/pre
    command: sed -i 's/\(^cd $EB_CONFIG_APP_ONDECK\)/\1\nln -s $EB_CONFIG_APP_VENDOR_BUNDLE .\/vendor\/bundle/' 10_bundle_install.sh
  z_write_post_provisioning_complete_file:
    cwd: /opt/elasticbeanstalk/support
    command: touch .post-provisioning-complete 

我做错了什么,我需要一些特别的东西才能让它与 Puma 合作吗?

【问题讨论】:

我也遇到了同样的问题,从那以后你找到解决方案了吗? 更新到最新版本的 AMI 为我解决了这个问题。 是“运行 Ruby 2.2 (Puma) 的 64 位 Amazon Linux 2015.03 v2.0.1”吗?如果是,我已经在使用这个,但问题仍然存在。 那么您的 ebextensions 可能存在问题,看看这些它们不是 100% 最新的,但它们会为您指明正确的方向 github.com/Mullen/ebextensions 显然这是正常的:“因为 Elastic Beanstalk 使用了插入式升级过程,可能会有几秒钟的停机时间。目前没有解决方法。”这很糟糕。 docs.aws.amazon.com/elasticbeanstalk/latest/dg/… 【参考方案1】:

此问题不会出现在最新版本 - 运行 Ruby 2.0 (Puma) 的 64 位 Amazon Linux 2014.03 v1.0.5

【讨论】:

以上是关于运行 Puma 和 Nginx 的带有 AWS Elastic Beanstalk 的 Rails 应用程序 502的主要内容,如果未能解决你的问题,请参考以下文章

带有 Puma 和 Nginx 服务页面的 Elastic Beanstalk 上预编译资产的 Rails 4 应用程序以及旧资产链接

使用 SSL 和 Nginx 运行 Puma

使用 -d(守护进程)运行 Rails(Puma)时的 Nginx 502

在 puma、rails、nginx 上设置 rails 应用程序一切都在运行,但 nginx 发送错误

如何使用 Elastic beanstalk 和 Dockerrun.aws.json 正确部署到 AWS?

为啥我需要 Nginx 和 Puma?