gpt4 book ai didi

ruby-on-rails - AWS ECS 上 at_exit 中的 SignalException

转载 作者:行者123 更新时间:2023-12-04 12:51:29 25 4
gpt4 key购买 nike

我们正在使用基于官方 ruby:2.4.2 的 docker 镜像在 ECS 上运行 Rails 5.1 应用程序图片。

根据我从旧流程中的理解,在许多部署中,我们收到此异常:

SignalException: SIGTERM - SignalException in at_exit

Backtrace:

[GEM_ROOT]/gems/puma-3.11.0/lib/puma/launcher.rb:397 :in `block in setup_signals`
[GEM_ROOT]/gems/puma-3.11.0/lib/puma/single.rb:106 :in `join`
[GEM_ROOT]/gems/puma-3.11.0/lib/puma/single.rb:106 :in `run`
[GEM_ROOT]/gems/puma-3.11.0/lib/puma/launcher.rb:183 :in `run`
[GEM_ROOT]/gems/puma-3.11.0/lib/puma/cli.rb:77 :in `run`
[GEM_ROOT]/gems/puma-3.11.0/bin/puma:10 :in `<top (required)>`

/usr/local[GEM_ROOT]/bin/puma:21 :in `load`

19 require "bundler/setup"
20
21 load Gem.bin_path("puma", "puma")

/usr/local[GEM_ROOT]/bin/puma:21 :in `<main>`

我找到了 this建议设置 BUNDLE_DISABLE_EXEC_LOADtrue会解决这个问题,但它没有。

另外,请注意 in at_exit部分。是否有可能我们的关闭时间太长,所以 ECS 发送另一个 SIGTERM在进程正确终止之前?

命令是
"command": [
"bin/ecs",
"webserver"
]

bin/ecs
#!/usr/bin/env ruby

COMMANDS = {
"webserver" => "puma -C config/puma.rb",
"sidekiq" => "sidekiq -C config/sidekiq.yml"
}

system("bundle", "exec", "rake", "db:abort_if_pending_migrations")

exit $?.exitstatus unless $?.success?

command = COMMANDS[ARGV.first].split(" ")
exec(*command)

我们这样做是为了避免在某处运行 shell,因为它会吞下信号。我们还设置了一个高停止超时,以确保长时间运行的 sidekiq 任务不会被杀死:
ECS_CONTAINER_STOP_TIMEOUT=1h

容器退出非常快,所以超时不是问题。如果它被杀了,它也不能报告它,不是吗?

最佳答案

似乎 Honeybadger 正在报告信号异常,但应该忽略它。它将在 3.3.0 之后的下一个版本(尚未发布)https://github.com/honeybadger-io/honeybadger-ruby/pull/269

关于ruby-on-rails - AWS ECS 上 at_exit 中的 SignalException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48922907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com