Ruby 警卫的事件处理程序(在退出时)?

Ruby 警卫的事件处理程序(在退出时)?,ruby,rspec,guard,Ruby,Rspec,Guard,我有一个通知系统,当guard rspec失败时,它会点亮一个LED红色,当它通过时,它会点亮绿色,这很好,但我正在寻找一种方法,在我退出(或guard崩溃)时关闭指示灯 我想知道是否有办法捕获“On Exit”事件并运行一些代码 此外,是否有方法捕获异常(如“出错”事件)?使用保护回调 根据,当Guard退出时调用#stop方法 Guard的自述部分指出,您可以在#stop方法运行之前或之后钩住它。并没有迹象表明,如果Guard崩溃,这个方法将运行任何东西,所以它可能只适用于干净的出口 下面是

我有一个通知系统,当guard rspec失败时,它会点亮一个LED红色,当它通过时,它会点亮绿色,这很好,但我正在寻找一种方法,在我退出(或guard崩溃)时关闭指示灯

我想知道是否有办法捕获“On Exit”事件并运行一些代码

此外,是否有方法捕获异常(如“出错”事件)?

使用保护回调 根据,当Guard退出时调用
#stop
方法

Guard的自述部分指出,您可以在
#stop
方法运行之前或之后钩住它。并没有迹象表明,如果Guard崩溃,这个方法将运行任何东西,所以它可能只适用于干净的出口

下面是一个未经测试的示例,我将从它开始

# Guardfile

require 'led'

guard :rspec do
    watch('spec/*')

    callback(:stop_end) { set_led(:off) }
end
使用包装器脚本 您可以创建一个ruby脚本,该脚本运行Guard、blocks,并在Guard完成运行后关灯,甚至崩溃

#!/usr/bin/env ruby
# wrapper.rb

require 'led'

system("guard")
set_led(:off)
phoet's at_出口建议 假设崩溃的守护程序不会干扰退出时的
回调,该方法应该和包装器脚本一样工作

# Guardfile

require 'led'

at_exit { set_led(:off) }

guard :rspec do
    watch('spec/*')
end
我通过运行Guard测试了这个方法,然后在一个单独的终端

$ pkill -15 -f guard     # same as Ctrl-c, triggers at_exit
$ pkill -9  -f guard     # kills ruby, does not trigger at_exit

我认为这个保护文件就是ruby。你试过添加一个at_出口钩子吗?at_出口可以工作,但是当使用bundler时,它有一个小问题,所以为了解决这个问题,我做了:at_出口做bundler.with_clean_env{system“digicolor off”}结束