Ruby 来自Rake的长时间运行的shell命令是否可以正常中断?
在几个项目中,我希望有一个rake任务,比如Ruby 来自Rake的长时间运行的shell命令是否可以正常中断?,ruby,rake,Ruby,Rake,在几个项目中,我希望有一个rake任务,比如rake服务器,它将开始通过应用程序需要的任何方式为该应用程序提供服务。这里有一个例子: task :server do %x{bundle exec rackup -p 1234} end 这是可行的,但当我准备停止它时,按Ctrl+c并不能正常关闭;它会中断Rake任务本身,这表示Rake已中止并给出堆栈跟踪。在某些情况下,我必须执行两次Ctrl+c 我可能可以用Signal.trap编写一些东西,这样可以更优雅地打断这个过程。有没有更简单的
rake服务器
,它将开始通过应用程序需要的任何方式为该应用程序提供服务。这里有一个例子:
task :server do
%x{bundle exec rackup -p 1234}
end
这是可行的,但当我准备停止它时,按Ctrl+c
并不能正常关闭;它会中断Rake任务本身,这表示Rake已中止代码>并给出堆栈跟踪。在某些情况下,我必须执行两次Ctrl+c
我可能可以用Signal.trap
编写一些东西,这样可以更优雅地打断这个过程。有没有更简单的方法
trap('SIGINT') { puts "Your message"; exit }
这应该是个好办法
您甚至可以在任务级别添加陷阱
task :server do
trap('SIGINT') { puts "Your message"; exit }
%x{bundle exec rackup -p 1234}
end
又好又简单!虽然,为了优雅地结束,使用exit
而不发出砰的一声似乎不是更好吗?@NathanLong取决于你对“优雅”的定义。对于人眼来说是一样的:PWithexit代码>“未运行任何退出处理程序。”因此将忽略退出do的任何。我想我还是让它们跑吧。无论如何,非常感谢@NathanLong是的,这就是区别,肉眼看不见:P让我更新响应以符合您的要求。我可以停止控制器的指定任务吗?不确定它是否适用于您的情况,但我刚刚遇到了一个类似的rake任务问题,问题是在内部,我捕获了特定代码块中的任何类型的异常。似乎我也在吞咽Ctrl+C。当我开始捕捉StandardError时,Ctrl+C就开始工作了。