I sent something similar via email earlier. This is cleaner and shuts down without barfing.
diff -ru vintage-0.0.1-original/lib/vintage/handler.rb vintage-0.0.1/lib/vintage/handler.rb
--- vintage-0.0.1-original/lib/vintage/handler.rb 2008-01-05 13:52:25.000000000 -0800
+++ vintage-0.0.1/lib/vintage/handler.rb 2008-01-05 17:12:33.000000000 -080..@@ -1,5 +1,34 @@
require 'rubygems'
-require 'mongrel'
+
+# Borrowed from merb-0.4.2
+if ENV['SWIFT']
+ begin
+ require 'swiftcore/swiftiplied_mongrel'
+ puts "Using Swiftiplied Mongrel"
+ rescue LoadError
+ require 'mongrel'
+ puts "SWIFT variable set but not installed - falling back to normal Mongrel"
+ end
+elsif ENV['EVENT']
+ begin
+ require 'swiftcore/evented_mongrel'
+ puts "Using Evented Mongrel"
+ rescue LoadError
+ require 'mongrel'
+ puts "EVENT variable set but swiftiply not installed - falling back to normal Mongrel"
+ end
+elsif ENV['PACKET']
+ begin
+ require 'packet_mongrel'
+ puts "Using Packet Mongrel"
+ rescue LoadError
+ require 'mongrel'
+ puts "PACKET variable set but packet not installed - falling back to normal Mongrel"
+ end
+else
+ require 'mongrel'
+end
+
require 'erubis'
require 'erb'
require 'mime/types'
diff -ru vintage-0.0.1-original/lib/vintage/server.rb vintage-0.0.1/lib/vintage/server.rb
--- vintage-0.0.1-original/lib/vintage/server.rb 2008-01-05 13:52:25.000000000 -0800
+++ vintage-0.0.1/lib/vintage/server.rb 2008-01-05 17:12:29.000000000 -080..@@ -1,5 +1,4 @@
require 'rubygems'
-require 'mongrel'
require 'erubis'
.@@ -26,7 +25,7 @@
h = Mongrel::HttpServer.new("0.0.0.0", options[:port])
h.register(options[:mount], Handler.new(options))
h.run.join
- rescue Interrupt
+ rescue Interrupt, Mongrel::StopServer
Log.enter
Log.enter "- interrupt signal caught"
Log.enter "\tshutting server down"