Puma "Early termination of worker" 调查困难重重
Puma "Early termination of worker" investigation difficult
我只更新了我的应用程序的 gem 并移至 Rails 6.1.0.rc1
,现在无法 运行 puma
。我看到许多消息说 [7XXXX] Early termination of worker
.
我可以通过 运行ning bundle exec puma -p 3000 -e production
在本地复制它,但我在 log/production.log
或任何其他环境的日志中看不到任何其他输出。
此时除了等待新的 Rails rc,我不确定如何才能找到问题的根源。如果我 运行 bundle exec puma -C config/puma.rb -p 3000
或 bundle exec rails s
.
也没有问题
其他详细信息
在Gemfile
gem 'puma', '~> 4.1'
并在 Gemfile.lock
puma (4.3.6)
我更新到 Puma 5.0.4
所以我可以在 Control/Status Server Puma can 运行 上使用 thread-backtraces
方法。它能够为我提供以下输出,稍后我将深入研究,但它似乎没有提供确凿的证据。
[
{
"backtrace": [
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/cluster.rb:412:in `select'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/cluster.rb:412:in `run'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/launcher.rb:171:in `run'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/cli.rb:80:in `run'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/bin/puma:10:in `<top (required)>'",
"~/.rvm/gems/ruby-2.7.2/bin/puma:23:in `load'",
"~/.rvm/gems/ruby-2.7.2/bin/puma:23:in `<main>'",
"~/.rvm/gems/ruby-2.7.2/bin/ruby_executable_hooks:24:in `eval'",
"~/.rvm/gems/ruby-2.7.2/bin/ruby_executable_hooks:24:in `<main>'"
],
"name": "Thread: TID-5ic"
},
{
"backtrace": [
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/plugin/tmp_restart.rb:21:in `sleep'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/plugin/tmp_restart.rb:21:in `block in start'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/plugin.rb:68:in `block (2 levels) in fire_background'"
],
"name": "Thread: TID-5iw puma plugin background 0"
},
{
"backtrace": [
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/reactor.rb:70:in `select'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/reactor.rb:70:in `select_loop'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/reactor.rb:34:in `block in run'"
],
"name": "Thread: TID-5jg puma reactor"
},
{
"backtrace": [
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/thread_pool.rb:308:in `sleep'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/thread_pool.rb:308:in `block in start!'"
],
"name": "Thread: TID-5k0 puma threadpool reaper"
},
{
"backtrace": [
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/thread_pool.rb:308:in `sleep'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/thread_pool.rb:308:in `block in start!'"
],
"name": "Thread: TID-5kk puma threadpool trimmer"
},
{
"backtrace": [
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/server.rb:323:in `select'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/server.rb:323:in `handle_servers'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/server.rb:258:in `block in run'"
],
"name": "Thread: TID-5l4 puma server"
},
{
"backtrace": [
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/launcher.rb:219:in `backtrace'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/launcher.rb:219:in `block in thread_status'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/launcher.rb:215:in `each'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/launcher.rb:215:in `thread_status'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/app/status.rb:59:in `call'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/request.rb:76:in `block in handle_request'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/thread_pool.rb:337:in `with_force_shutdown'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/request.rb:75:in `handle_request'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/server.rb:430:in `process_client'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/thread_pool.rb:145:in `block in spawn_thread'"
],
"name": "Thread: TID-5og puma threadpool 001"
}
]
出乎意料!
pumactl
并且有一个 control-url
帮助,但我的一个朋友提出了我只希望更明显的最好的想法,
are you throwing the error on a different server?
我 运行 gem install thin
和 RAILS_ENV=production thin start
终于向我展示了我正在寻找的错误!
事实证明,我不应该使用像 add_template_helper
这样的 non-public 方法,因为 ActionMailer::Base
可能并不总是获得 ActionController::Base
的所有方法。我在开发中没有看到这个错误,因为 Rails 不会急切地加载你所有的 类.
我只更新了我的应用程序的 gem 并移至 Rails 6.1.0.rc1
,现在无法 运行 puma
。我看到许多消息说 [7XXXX] Early termination of worker
.
我可以通过 运行ning bundle exec puma -p 3000 -e production
在本地复制它,但我在 log/production.log
或任何其他环境的日志中看不到任何其他输出。
此时除了等待新的 Rails rc,我不确定如何才能找到问题的根源。如果我 运行 bundle exec puma -C config/puma.rb -p 3000
或 bundle exec rails s
.
其他详细信息
在Gemfile
gem 'puma', '~> 4.1'
并在 Gemfile.lock
puma (4.3.6)
我更新到 Puma 5.0.4
所以我可以在 Control/Status Server Puma can 运行 上使用 thread-backtraces
方法。它能够为我提供以下输出,稍后我将深入研究,但它似乎没有提供确凿的证据。
[
{
"backtrace": [
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/cluster.rb:412:in `select'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/cluster.rb:412:in `run'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/launcher.rb:171:in `run'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/cli.rb:80:in `run'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/bin/puma:10:in `<top (required)>'",
"~/.rvm/gems/ruby-2.7.2/bin/puma:23:in `load'",
"~/.rvm/gems/ruby-2.7.2/bin/puma:23:in `<main>'",
"~/.rvm/gems/ruby-2.7.2/bin/ruby_executable_hooks:24:in `eval'",
"~/.rvm/gems/ruby-2.7.2/bin/ruby_executable_hooks:24:in `<main>'"
],
"name": "Thread: TID-5ic"
},
{
"backtrace": [
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/plugin/tmp_restart.rb:21:in `sleep'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/plugin/tmp_restart.rb:21:in `block in start'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/plugin.rb:68:in `block (2 levels) in fire_background'"
],
"name": "Thread: TID-5iw puma plugin background 0"
},
{
"backtrace": [
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/reactor.rb:70:in `select'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/reactor.rb:70:in `select_loop'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/reactor.rb:34:in `block in run'"
],
"name": "Thread: TID-5jg puma reactor"
},
{
"backtrace": [
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/thread_pool.rb:308:in `sleep'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/thread_pool.rb:308:in `block in start!'"
],
"name": "Thread: TID-5k0 puma threadpool reaper"
},
{
"backtrace": [
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/thread_pool.rb:308:in `sleep'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/thread_pool.rb:308:in `block in start!'"
],
"name": "Thread: TID-5kk puma threadpool trimmer"
},
{
"backtrace": [
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/server.rb:323:in `select'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/server.rb:323:in `handle_servers'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/server.rb:258:in `block in run'"
],
"name": "Thread: TID-5l4 puma server"
},
{
"backtrace": [
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/launcher.rb:219:in `backtrace'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/launcher.rb:219:in `block in thread_status'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/launcher.rb:215:in `each'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/launcher.rb:215:in `thread_status'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/app/status.rb:59:in `call'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/request.rb:76:in `block in handle_request'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/thread_pool.rb:337:in `with_force_shutdown'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/request.rb:75:in `handle_request'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/server.rb:430:in `process_client'",
"~/.rvm/gems/ruby-2.7.2/gems/puma-5.0.4/lib/puma/thread_pool.rb:145:in `block in spawn_thread'"
],
"name": "Thread: TID-5og puma threadpool 001"
}
]
出乎意料!
pumactl
并且有一个 control-url
帮助,但我的一个朋友提出了我只希望更明显的最好的想法,
are you throwing the error on a different server?
我 运行 gem install thin
和 RAILS_ENV=production thin start
终于向我展示了我正在寻找的错误!
事实证明,我不应该使用像 add_template_helper
这样的 non-public 方法,因为 ActionMailer::Base
可能并不总是获得 ActionController::Base
的所有方法。我在开发中没有看到这个错误,因为 Rails 不会急切地加载你所有的 类.