gpt4 book ai didi

ruby-on-rails - 当进程收到 SIGTERM 时,ActiveRecord::StatementInvalid?

转载 作者:行者123 更新时间:2023-12-01 11:10:27 27 4
gpt4 key购买 nike

在我的 Rails 应用程序中,我有一个脚本可以更新数据库中的一些记录。当我发送一个 SIGTERM 来终止脚本时,它偶尔会在 ActiveRecord 执行查询时收到该信号。这会导致引发 ActiveRecord::StatementInvalid 异常。

我想捕获当它们是 SIGTERM 的结果时发生的 StatementInvalid 异常并退出脚本。我如何判断 StatementInvalid 是由于信号而不是其他原因而发生的?

最佳答案

如果你捕获 TERM 信号,我相信你会避免异常。您可以在脚本的开头执行此操作(或者实际上在任何地方都可以,但您只需执行一次)。

 Signal.trap("TERM") do
Kernel.exit!
end

您收到 StatementInvalid 错误的原因是 Ruby 通过在当前执行位置引发 SIGTERM 异常来处理信号。 ActiveRecord 正在捕获异常并将其作为 StatementInvalid 重新抛出。通过设置信号处理程序,Ruby 将执行您的处理程序而不是引发异常。

参见 Ruby Signal documentation获取更多信息。

关于ruby-on-rails - 当进程收到 SIGTERM 时,ActiveRecord::StatementInvalid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/548048/

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