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

时间:2014-01-15 19:09:11

标签: ruby rake

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

task :server do
  %x{bundle exec rackup -p 1234}
end

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

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

1 个答案:

答案 0 :(得分:9)

trap('SIGINT') { puts "Your message"; exit }

那应该成功。

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

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