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
我搜索了那个错误,没有找到解决办法。
我将 Puma 与运行在 AWS 上的 64 位 Amazon Linux/2.11.2 上的 Ruby 2.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
...
我的项目就是这样Gemfile包含的puma。
gem 'puma', '~> 4.3.3'
我的项目是即将到来的新项目的样板,所以在更新的补丁版本 puma 4.3.5 出现之前,“旧”项目的一切都很好。
解决方案是修复 Gemfile 中的 gem 版本,如下所示:
gem 'puma', '= 4.3.3'
经验教训是始终将您的环境与部署工具的环境相匹配。在此处跟踪最新的解决方案堆栈版本。
小智 5
当 Puma 无法启动时发生。
好消息,你可以跑了
bundle exec puma -p 3000 -e production
在本地,然后你会得到详细的错误。
我个人在 has_many 和一些delayed_job 问题上发现了一个 :optional 标签,这些问题破坏了我的。所以没有人可以解决这个问题。
对于最近在 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
因此,为了检查实际错误是什么,我输入了我的应用程序的代码文件夹/var/app/current并运行
pumactl start
这显示了实际错误:
[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.
所以,因为它说 nio4r 版本存在冲突,我通过强制 nio4r 版本到 2.5.3 将它添加到我的 Gemfile 来修复它:
gem 'nio4r', '2.5.3'
然后运行bundle update,提交和推送更改和部署。
我忘了告诉我的项目结构。我在 app/ 文件夹下有一个名为 overrides 的目录。
最后,我发现 app/overrides 文件夹导致 puma 崩溃可能与此问题有关:How toignore afolder in Zeitwerk for Rails 6?
在我更改了environment.rb文件并忽略app/overrides文件夹后,我的项目开始顺利运行。
| 归档时间: | 
 | 
| 查看次数: | 4903 次 | 
| 最近记录: |