在几个项目中,我希望有一个像rake server
这样的rake任务,它将通过它需要的任何方式开始为该应用程序提供服务。这是一个例子:
task :server do
%x{bundle exec rackup -p 1234}
end
这样可行,但是当我准备停止它时,按Ctrl+c
不会优雅地关闭;它会中断Rake任务本身,它表示rake aborted!
并给出堆栈跟踪。在某些情况下,我必须做Ctrl+c
两次。
我可能会用Signal.trap
写一些可以更优雅地打断它的东西。有更简单的方法吗?
答案 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