3

我正在尝试 Mongrel 并使用以下代码:

require 'rubygems'
require 'mongrel'

class SimpleHandler < Mongrel::HttpHandler
    def process(request, response)
        response.start(200) do |head, out|
            head["Content-Type"] = "text/plain"
            out.write("Hello World!\n")
        end
    end
end

h = Mongrel::HttpServer.new("0.0.0.0", "3000")
h.register("/test", SimpleHandler.new)
puts "Press Control-C to exit"
h.run.join

trap("INT") do
    puts "Exiting..."
end

基本上,这只是打印出“Hello World!” 当我去 localhost:3000/test. 它工作正常,我可以用 Control-C 关闭程序。但是当我按下 Control-C 时,会输出:

my_web_server.rb:17:in `join': Interrupt
from my_web_server.rb:17

所以我试着把那个trap("INT")声明放在最后,但它没有被调用。解决方案?

谢谢。

4

1 回答 1

8

如果您只想在没有堆栈跟踪的情况下退出,则无需捕获 INT。control-c 导致“中断”异常。因此,要让您的程序在 control-C 上退出而没有丑陋的堆栈跟踪,请捕获该异常:

begin
  ... # do stuff
rescue Interrupt
  puts "Exiting..."
end
于 2010-03-21T06:00:24.057 回答