来自Rake的长时间运行的shell命令可以优雅地中断?

Nat*_*ong 5 ruby rake

在几个项目中,我希望有一个rake任务rake server,它将通过它需要的任何方式开始为该应用程序提供服务.这是一个例子:

task :server do
  %x{bundle exec rackup -p 1234}
end
Run Code Online (Sandbox Code Playgroud)

这是有效的,但是当我准备停止它时,按下Ctrl+c不会优雅地关闭; 它会中断Rake任务本身,它表示rake aborted!并提供堆栈跟踪.在某些情况下,我必须做Ctrl+c两次.

我可能会写一些东西Signal.trap会更优雅地打断它.有没有更简单的方法?

rob*_*nex 11

trap('SIGINT') { puts "Your message"; exit }
Run Code Online (Sandbox Code Playgroud)

这应该成功.

您甚至可以trap在任务级别添加.

task :server do
  trap('SIGINT') { puts "Your message"; exit }
  %x{bundle exec rackup -p 1234}
end
Run Code Online (Sandbox Code Playgroud)