Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
if ['2.3.8', '2.3.9', '2.3.10', '2.3.11'].include?(Rails.version) && Gem.available?('mongrel', '~>1.1.5') && self.class.const_defined?(:Mongrel)
# Pulled right from latest rack. Old looked like this in 1.1.0 version.
#
# def [](k)
# super(@names[k] ||= @names[k.downcase])
# end
#
module Rack
module Utils
class HeaderHash < Hash
def [](k)
super(@names[k]) if @names[k]
super(@names[k.downcase])
end
end
end
end
# Code pulled from the ticket above.
#
class Mongrel::CGIWrapper
def header_with_rails_fix(options = 'text/html')
@head['cookie'] = options.delete('cookie').flatten.map { |v| v.sub(/^\n/,'') } if options.class != String and options['cookie']
header_without_rails_fix(options)
end
alias_method_chain :header, :rails_fix
end
# Pulled right from 2.3.8 ActionPack. Simple diff was
#
# if headers.include?('Set-Cookie')
# headers['cookie'] = headers.delete('Set-Cookie').split("\n")
# end
#
# to
#
# if headers['Set-Cookie']
# headers['cookie'] = headers.delete('Set-Cookie').split("\n")
# end
#
module ActionController
class CGIHandler
def self.dispatch_cgi(app, cgi, out = $stdout)
env = cgi.__send__(:env_table)
env.delete "HTTP_CONTENT_LENGTH"
cgi.stdinput.extend ProperStream
env["SCRIPT_NAME"] = "" if env["SCRIPT_NAME"] == "/"
env.update({
"rack.version" => [0,1],
"rack.input" => cgi.stdinput,
"rack.errors" => $stderr,
"rack.multithread" => false,
"rack.multiprocess" => true,
"rack.run_once" => false,
"rack.url_scheme" => ["yes", "on", "1"].include?(env["HTTPS"]) ? "https" : "http"
})
env["QUERY_STRING"] ||= ""
env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"]
env["REQUEST_PATH"] ||= "/"
env.delete "PATH_INFO" if env["PATH_INFO"] == ""
status, headers, body = app.call(env)
begin
out.binmode if out.respond_to?(:binmode)
out.sync = false if out.respond_to?(:sync=)
headers['Status'] = status.to_s
if headers['Set-Cookie']
headers['cookie'] = headers.delete('Set-Cookie').split("\n")
end
out.write(cgi.header(headers))
body.each { |part|
out.write part
out.flush if out.respond_to?(:flush)
}
ensure
body.close if body.respond_to?(:close)
end
end
end
end
end
@Bill

This comment has been minimized.

Show comment Hide comment
@Bill

Bill Mar 16, 2011

I love you man!

Bill commented Mar 16, 2011

I love you man!

@tibu

This comment has been minimized.

Show comment Hide comment
@tibu

tibu Jun 20, 2011

Lot's ok thanks!

tibu commented Jun 20, 2011

Lot's ok thanks!

@sousousore1

This comment has been minimized.

Show comment Hide comment
@sousousore1

sousousore1 Jun 27, 2011

thanks!

thanks!

@umarsheikh

This comment has been minimized.

Show comment Hide comment
@umarsheikh

umarsheikh Aug 9, 2011

I dont understand how i can use this file? should i create a file in the lib directory of my project, name it 'mongrel.rb' and paste the contents of this file there?

I dont understand how i can use this file? should i create a file in the lib directory of my project, name it 'mongrel.rb' and paste the contents of this file there?

@Bill

This comment has been minimized.

Show comment Hide comment
@Bill

Bill Aug 9, 2011

umarsheikh create a file called mongrel.db and put it in /config/initializers

Bill commented Aug 9, 2011

umarsheikh create a file called mongrel.db and put it in /config/initializers

@acuppy

This comment has been minimized.

Show comment Hide comment
@acuppy

acuppy Aug 9, 2011

This is wonderful!

acuppy commented Aug 9, 2011

This is wonderful!

@Intrepidd

This comment has been minimized.

Show comment Hide comment
@Intrepidd

Intrepidd Aug 23, 2011

Fixed my broken mongrel, thanks :)

Fixed my broken mongrel, thanks :)

@derekjwilliams

This comment has been minimized.

Show comment Hide comment
@derekjwilliams

derekjwilliams Dec 12, 2011

It looks like this is also needed for Rails.version 2.3.14. I updated Redmine to version 1.3 today and updated this to fix the text/plain should be text/html issue.

It looks like this is also needed for Rails.version 2.3.14. I updated Redmine to version 1.3 today and updated this to fix the text/plain should be text/html issue.

@we4tech

This comment has been minimized.

Show comment Hide comment
@we4tech

we4tech Dec 24, 2011

Thanks rca it works with rails 2.3.12 :) just a savior :D

we4tech commented Dec 24, 2011

Thanks rca it works with rails 2.3.12 :) just a savior :D

@andrewhavens

This comment has been minimized.

Show comment Hide comment
@andrewhavens

andrewhavens Jan 16, 2013

This fixed my problem while upgrading to Rails 2.3.15 (just comment out the if statement checking the Rails version because you dont need it). The error message that I had was:

Error calling Dispatcher.dispatch #<NoMethodError: private method `split' called for nil:NilClass>

Just copy the contents of this gist and paste into config/initializers/mongrel.rb

This fixed my problem while upgrading to Rails 2.3.15 (just comment out the if statement checking the Rails version because you dont need it). The error message that I had was:

Error calling Dispatcher.dispatch #<NoMethodError: private method `split' called for nil:NilClass>

Just copy the contents of this gist and paste into config/initializers/mongrel.rb

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment