2014-01-15 1 views
5

여러 프로젝트에서 필요한 모든 수단을 통해 해당 응용 프로그램을 제공하기 시작하는 rake server과 같은 레이크 작업을하고 싶습니다. 여기에 하나의 예입니다 :정상적으로 중단 될 수있는 Rake의 장기 실행 쉘 명령은 무엇입니까?

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

이 작동하지만이 정상적으로 종료되지 않는 Ctrl+c를 누르면 중지 할 준비가있을 때; 그것은 rake aborted!이라고 말하는 레이크 작업 자체를 중단하고 스택 추적을 제공합니다. 어떤 경우에는 Ctrl+c 두 번해야합니다.

Signal.trap으로 뭔가를 작성하면 더 적절하게 방해 할 수 있습니다. 더 쉬운 방법이 있습니까?

+0

내 사례에 적용 할만한지 확실하지 않지만 내 레이크 작업과 비슷한 문제가 발생했는데 문제는 특정 코드 블록에서 예외를 잡는 것이 었습니다. 그것은 또한 Ctrl + C를 삼키는 것으로 보인다. StandardError를 잡기 시작하자마자 Ctrl + C가 시작되었습니다. – Renra

답변

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

트릭을 만들어야합니다.

trap을 작업 수준에 추가 할 수도 있습니다.

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

멋지고 쉽게! 정상적으로 끝내기 위해, 쾅하지 않고 '종료'를 사용하는 것이 더 좋지 않습니까? –

+0

@ NathanLong "우아하게"정의에 따라 다릅니다. 인간의 눈에는 똑같습니다. P – robertodecurnex

+1

With 'exit!' "종료 핸들러가 실행되지 않습니다." 그래서'at_exit do' 블록은 무시됩니다. 나는 차라리 그 사람들이 뛰게 할 것이라고 생각한다. 어쨌든, 대단히 감사합니다! –