Puma 在 Elastic Beanstalk 的 Rails 6 API only 项目上停留在消息“工作人员提前终止”

yig*_*git 15 ruby-on-rails amazon-web-services puma

我有一个 Rails 6 api-only 应用程序,我无法在 AWS Elastic Beanstalk 上运行。部署该应用程序后,puma 卡住消息“提前终止工作人员”。我没有该项目的任何自定义配置或设置。只需创建一个环境并上传存档的 zip 文件。

使用命令杀死 puma 进程后,pkill -9 -f puma我的 puma.log 文件如下所示:

=== puma startup: 2020-01-22 13:17:45 +0000 ===
=== puma startup: 2020-01-22 13:17:45 +0000 ===
[28858] Early termination of worker
[28856] Early termination of worker
[28862] Early termination of worker
[28865] Early termination of worker
[28869] Early termination of worker
Run Code Online (Sandbox Code Playgroud)

我搜索了那个错误,没有找到解决办法。

  • 红宝石版本:2.6.5
  • 彪马 4.3.1 版本
  • Rails 版本:6.0.2.1

我将 Puma 与运行在 AWS 上的 64 位 Amazon Linux/2.11.2 上的 Ruby 2.6 结合使用。

Vic*_*Vic 6

遇到同样的错误。原来它是美洲狮的不同补丁。

我正在使用来自弹性豆茎的这个堆栈

Ruby 2.6 AL2 version 3.0.1
64bit Amazon Linux 2 v3.0.1 running Ruby 2.6
Ruby 2.6.6-p146
RubyGems 3.1.2
Puma 4.3.3
...
Run Code Online (Sandbox Code Playgroud)

我的项目就是这样Gemfile包含的puma

gem 'puma', '~> 4.3.3'
Run Code Online (Sandbox Code Playgroud)

我的项目是即将到来的新项目的样板,所以在更新的补丁版本 puma 4.3.5 出现之前,“旧”项目的一切都很好。

解决方案是修复 Gemfile 中的 gem 版本,如下所示:

gem 'puma', '= 4.3.3'
Run Code Online (Sandbox Code Playgroud)

经验教训是始终将您的环境与部署工具的环境相匹配。在此处跟踪最新的解决方案堆栈版本。


小智 5

当 Puma 无法启动时发生。

好消息,你可以跑了

bundle exec puma -p 3000 -e production

在本地,然后你会得到详细的错误。

我个人在 has_many 和一些delayed_job 问题上发现了一个 :optional 标签,这些问题破坏了我的。所以没有人可以解决这个问题。


Fit*_*ito 5

对于最近在 64 位 Amazon Linux 2 平台上运行的 Ruby 2.6 从 3.1.1 版更新到 3.1.2 版,/var/log/puma/puma.log在我的 EC2 实例中检查 puma 登录后,它显示了您提到的内容:

[XXXXX] Early termination of worker
[XXXXX] + Gemfile in context: /var/app/current/Gemfile
Run Code Online (Sandbox Code Playgroud)

因此,为了检查实际错误是什么,我输入了我的应用程序的代码文件夹/var/app/current并运行

pumactl start
Run Code Online (Sandbox Code Playgroud)

这显示了实际错误:

[XXXXX] Unable to load application: Gem::LoadError: You have already activated nio4r 2.5.3, but your Gemfile requires nio4r 2.5.2. Prepending `bundle exec` to your command may solve this.
Run Code Online (Sandbox Code Playgroud)

所以,因为它说 nio4r 版本存在冲突,我通过强制 nio4r 版本到 2.5.3 将它添加到我的 Gemfile 来修复它:

gem 'nio4r', '2.5.3'
Run Code Online (Sandbox Code Playgroud)

然后运行bundle update,提交和推送更改和部署。

  • 我打赌添加一个“Procfile”会对您有所帮助(“web:bundle exec puma -C /opt/elasticbeanstalk/config/private/pumaconf.rb”)。将“bundle exec”添加到[默认](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ruby-platform-procfile.html)。 (2认同)

yig*_*git 0

我忘了告诉我的项目结构。我在 app/ 文件夹下有一个名为 overrides 的目录。

最后,我发现 app/overrides 文件夹导致 puma 崩溃可能与此问题有关:How toignore afolder in Zeitwerk for Rails 6?

在我更改了environment.rb文件并忽略app/overrides文件夹后,我的项目开始顺利运行。