-
-
Save rca/826692 to your computer and use it in GitHub Desktop.
| 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 |
Lot's ok thanks!
thanks!
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?
umarsheikh create a file called mongrel.db and put it in /config/initializers
This is wonderful!
Fixed my broken mongrel, thanks :)
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.
Thanks rca it works with rails 2.3.12 :) just a savior :D
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
I love you man!