当前位置:  开发笔记 > 后端 > 正文

当进程收到SIGTERM时,ActiveRecord :: StatementInvalid?

如何解决《当进程收到SIGTERM时,ActiveRecord::StatementInvalid?》经验,为你挑选了1个好方法。

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

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



1> wuputah..:

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

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

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

有关更多信息,请参阅Ruby Signal文档.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有