我有一个Rails 6 api应用程序,我无法在AWS Elastic Beanstalk上运行。在部署该应用程序后,puma会显示消息“Early termination of worker”。我没有任何自定义配置,也没有该项目的设置。只需创建一个环境并上传存档的zip文件。
在我用pkill -9 -f puma
命令杀死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
我搜索了那个错误,没有发现任何问题。
- Ruby版本:2.6.5
- Puma版本4.3.1
- Rails版本:6.0.2.1
我正在使用Puma和Ruby 2.6,运行在AWS上的64位Amazon Linux/2.11.2上。
6条答案
按热度按时间qni6mghb1#
对于最近在64位Amazon Linux 2平台上运行的Ruby 2.6的3.1.1到3.1.2版本的更新,在检查我的EC2示例中
/var/log/puma/puma.log
中的puma日志后,它显示了您提到的内容:所以,为了检查实际的错误是什么,我进入了我的应用程序的代码文件夹
/var/app/current
并运行这显示了实际误差:
所以,由于它说有一个nio4r版本的冲突,我通过强制nio4r版本到2.5.3来修复它,并将此添加到我的Gemfile中:
然后运行
bundle update
,提交和推送更改以及部署。11dmarpk2#
犯了同样的错误。原来这是一个不同的补丁美洲狮。
我用的是弹性豆茎的一叠
我的项目
Gemfile
包含puma
这样。我的项目是新项目的样板,所以在新的补丁版本puma 4.3.5出来之前,“老”项目的工作都很好。
解决方案是在Gemfile中修复gem的版本:
经验教训是始终将您的环境与部署工具的环境相匹配。在此处跟踪最新的解决方案堆栈版本。
j8yoct9x3#
当彪马不能启动时就会发生。
好消息,你可以跑了
bundle exec puma -p 3000 -e production
然后你会得到详细的错误。
我个人在一个has_many和some delayed_job问题上发现了一个:optional标签,这是我的问题。因此,没有一个解决办法。
jdgnovmf4#
@维克的回答是有帮助的,你应该确保你已经锁定了正确的彪马版本,但它没有解决我的问题。对我来说,问题是我的一段名为
Rails.application.credentials[...]
的代码,并且没有在Elastic Beanstalk示例上设置凭据。我将代码更改为仅使用ENV变量,例如
ENV["MY_VAR"]
,并在Elastic Beanstalk Configuration->Software settings页面中设置这些环境变量。不幸的是,在我能找到的日志中没有任何东西告诉我这就是我的应用程序崩溃的地方。我不得不从一个基本的Rails安装开始,然后慢慢地从我原来的项目中引入Gems和代码。每次我添加一个文件时,我都会使用
eb deploy
来确认它是否工作,最后将问题缩小到一个不工作的特定文件。68de4m5k5#
我忘了说我的项目结构。我在app/ folder下有一个名为overrides的目录。
最后,我发现app/overrides文件夹导致puma崩溃可能与此问题有关:How to ignore a folder in Zeitwerk for Rails 6?
在我改变了我的environment.rb文件,忽略app/overrides文件夹后,我的项目开始顺利运行。
n9vozmp46#
我的puma配置有一个“on_worker_ Boot ”块,它正在尝试数据库连接。在我的例子中,我在rails中有一个主+副本设置。从我们的puma配置中删除这个连接语句可以解决
Early termination of worker
错误。ActiveRecord::Base.establish_connection(YAML.load_file("#{app_dir}/config/database.yml")[ENV.fetch('RAILS_ENV')])