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