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

基本的に、これは「HelloWorld!」を出力するだけです。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 に答える