【问题标题】:AWS elastic beanstalk is not getting the environment variablesAWS弹性beantalk没有获取环境变量
【发布时间】:2021-01-07 07:55:25
【问题描述】:

我正在尝试在 AWS Elastic Beanstalk 上运行 Rails 6 应用程序,但我从 puma 日志中得到以下信息(每隔几秒重复一次)

[21776] + 上下文中的 Gemfile:/var/app/current/Gemfile
[21776] 工人提前终止

版本号:

  • 导轨6.0.3.3
  • 彪马4.3.5
  • ElasticBeanstalk Ruby 2.7 running on 64bit Amazon Linux 2/3.1.1
  • 红宝石2.7.1p83

服务器在实例外部没有响应,log/production.log 上没有任何内容。

在开发机器上以production 模式运行没有错误,并且数据库是可访问的(没有迁移失败)。

在 AWS 实例上运行命令 bundle exec puma -p 3000 -e production 我得到

Puma starting in single mode...
Version 4.3.5 (ruby 2.7.1-p83), codename: Mysterious Traveller
Min threads: 5, max threads: 5
Environment: production
Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

所以没有明显的错误可能导致工人停止。

如何找出导致工人失败的原因?

编辑 1:

我在实例上运行 Rails 控制台,发现缺少环境变量 - 例如生产数据库用户/通行证/主机。一旦我对它们进行硬编码,我就可以连接到数据库。 我怀疑缺少其他环境变量会导致应用崩溃。

【问题讨论】:

  • 我不认为 EB 使用端口 3000 -- 我会改为使用 $PORT 环境变量。您可能还需要检查 nginx 实例在哪里寻找您的后端

标签: ruby-on-rails amazon-web-services amazon-elastic-beanstalk puma


【解决方案1】:

AWS 论坛上的一位用户拥有the answer

在我的 Gemfile 中设置

gem "nio4r", "= 2.5.2"

修复了问题。

【讨论】:

  • 非常感谢!我想知道我们如何避免将来再次发生类似的事情?
  • @SimonL.Brazell AWS 支持建议建立一个单独的分支并使用最新的平台配置创建一个并行 EB 环境,看看它是否有效。他们还说他们甚至没有 ssh 访问该盒子的权限,因此由您来发现这些问题。
  • 但这发生在我身上没有部署或任何东西,只有客户端注意到服务器不再响应并让我知道,如果服务器没有改变/受到干扰,它应该继续工作对吗?
  • 我也遇到了同样的情况:盒子一直在运行,好像什么也没发生,但 rails 应用程序没有响应。我通过消除发现了问题,发现 puma 正在产卵工人并且他们一直在死亡。
  • 我发现 this 详细介绍了如何将 gem 与您的应用程序打包,不确定这是否能解决问题,但我可能会尝试一下。
猜你喜欢
  • 2017-11-25
  • 2019-09-24
  • 2020-12-26
  • 2017-01-17
  • 2016-09-01
  • 2015-05-13
  • 2015-10-10
  • 2020-02-13
  • 1970-01-01
相关资源
最近更新 更多