【问题标题】:Puma main process on exit callback退出回调的 Puma 主进程
【发布时间】:2018-01-26 13:03:18
【问题描述】:

如何在 Puma 主进程关闭之前执行 ruby​​ 代码? 现在我正在优雅地关闭 Puma 的操作:

Process.kill("INT", Process.ppid)

当所有工人都停工时,我需要执行 ruby​​ 代码。

at_exit do
  puts 'bye...'
end

将在每个进程退出后执行,并且我需要在所有工作人员退出后回调。

【问题讨论】:

  • 不是 100% 确定您的意思。您是否需要在每个工人退出后或在 Puma 停止之前执行的东西?你已经提到了at_exit,所以你能解释一下为什么这对你不起作用吗?
  • 这很hacky,但是你可以使用on_worker_boot 来知道你是否在一个工作进程中。而且由于主进程将最后退出,所有工作人员都会在那时退出。所以你应该只检查at_exit 块是否在主进程中。

标签: ruby puma


【解决方案1】:

只是一个小技巧......

将全局常量添加到您的 config.ru(或设置)文件中:

ROOT_PROCESS_ID = Process.pid

你可以这样做:

at_exit do
  if(Process.pid == ROOT_PROCESS_ID)
    puts 'bye...'
  end
end

这不是 Puma 特有的,因此即使您更换服务器(如果您曾经切换过),它也应该可以工作。

【讨论】:

    猜你喜欢
    • 2011-02-04
    • 2011-06-08
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 2018-09-11
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多