Transfer-encoding: gzip

Magnus Naeslund mag at kite.se
Sun Mar 18 18:31:09 EDT 2007


I gave up the idea to use the mongrel handlers for compression, and am using this kind of construct instead:

The action returns stuff like this:
return compress_if_possible(result)

And the utility method defined as:

    def compress_if_possible(str)
      enc = request.env[HTTP_ACCEPT_ENCODING]
      return str if enc.nil? or enc.include?('deflate') == false
      headers['Content-Encoding'] = 'deflate'
      
      # Shamelessly stolen from mongrels deflate filter
		  deflater = Zlib::Deflate.new(
		    Zlib::DEFAULT_COMPRESSION,
		    # drop the zlib header which causes both Safari and IE to choke
        -(Zlib::MAX_WBITS),
        Zlib::DEF_MEM_LEVEL,
        Zlib::DEFAULT_STRATEGY)

      return deflater.deflate(str, Zlib::FINISH)		  
    end

I'm ok with that ugliness :)

Anyways someone else might want to use additional handlers so here's my respun patch, feel free to include it if you like, Ezra.

Index: lib/merb/merb_server.rb
===================================================================
--- lib/merb/merb_server.rb     (revision 198)
+++ lib/merb/merb_server.rb     (working copy)
@@ -140,6 +140,7 @@
       end

       def run
+        @@additional_handlers = []
         @@merb_raw_opts = ARGV
         merb_config

@@ -284,6 +285,9 @@
             uri( "/", :handler => MerbUploadHandler.new(yconfig), :in_front => true) if @@merb_opts[:config]
             uri "/", :handler => MerbHandler.new(@@merb_opts[:dist_root]+'/public')
             uri "/favicon.ico", :handler => Mongrel::Error404Handler.new("")
+           @@additional_handlers.each do |h|
+             uri(h[:uri], :handler => h[:handler], :in_front => (h[:in_front] || false))
+           end
           end

           trap("INT") { stop }
@@ -295,7 +299,11 @@
       def config
         @@merb_opts
       end
-
+
+      def add_handler(h)
+       @@additional_handlers << h
+      end
+
     end

   end # Server



More information about the Merb-devel mailing list