Puma“提前解约工人”调查艰难

问题描述 投票:0回答:2

我只更新了应用程序的 gem 并移至 Rails

6.1.0.rc1
,现在无法运行
puma
。我看到很多消息都写着
[7XXXX] Early termination of worker

我可以通过运行

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
,这样我就可以在
控制/状态服务器
Puma 可以运行时使用 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"
    }
]
ruby-on-rails puma
2个回答
0
投票

出乎意料!

pumactl
和拥有
control-url
有帮助,但我的一个朋友提出了最好的想法,我只希望更明显,

您是否将错误抛出到不同的服务器上?

我运行了

gem install thin
并且
RAILS_ENV=production thin start
终于向我展示了我正在寻找的错误!

事实证明,我不应该使用像

add_template_helper
这样的非公共方法,因为
ActionMailer::Base
可能并不总能获得
ActionController::Base
的所有方法。我在开发中没有看到这个错误,因为 Rails 不会急切地加载所有类。


0
投票

就我而言,Postgres 服务器未启动并且 ENV 丢失。

它不会抛出正确的错误,但最终会导致工人提前终止。

只需确保:

  • 您的数据库已启动并正在运行
  • 所有 ENV 均已更新
© www.soinside.com 2019 - 2024. All rights reserved.