Create a gist now

Instantly share code, notes, and snippets.

if Rails.version == '2.3.8' && Gem.available?('mongrel', Gem::Requirement.new('~>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
@buntine

Hey, thanks for the patch. Rubygems (1.3.5) was complaining about an "illformed requirement", which I fixed by replacing the first line with:

if Rails.version == '2.3.8' && Gem.available?('mongrel', '~>1.1.5') && self.class.const_defined?(:Mongrel)

EDIT: Thanks for the correct fix, bshand.

@bshand

I "fixed" it for Rubygems 1.3.5 with the following first line:

if Rails.version == '2.3.8' && Gem.available?('mongrel', '~>1.1.5') && self.class.const_defined?(:Mongrel)

@stangel

This seems to also be a problem in Rails 2.3.9 so I changed the first line to:
if ['2.3.8','2.3.9'].include?( Rails.version ) && Gem.available?('mongrel', Gem::Requirement.new('~>1.1.5')) && self.class.const_defined?(:Mongrel)

@dumbledore

the same with Rails 2.3.10

@vivek-dhayalan

When I use this above code I am getting undefined method 'alias_method_chain' for #Class:Mongrel::CGIWrapper. I am newbie to rails please help me. Thanks in advance.

@stangel

Vivek a couple suggestions:
1. If you're using Rails 3 then alias_method_chain is deprecated, but you shouldn't need this patch on Rails 3.
2. If you're on a Mac you might try this: http://john.vipvip.com/blog/?p=71

@vivek-dhayalan

I am using rails 2.3.8 only. But still I am facing this problem.

@metaskills
Owner

@vivek-dhayalan Perhaps you are not loading this file at the right time. I have it in my 2.3.8 app in lib/initializers/mongrel.rb

@vivek-dhayalan

I have moved my file to location as said and I have added the following two lines in environment.rb

require File.join(File.dirname(File.expand_path(FILE)), '../lib/initializers/mongrel')
config.gem "mongrel"

but, I am getting the same error again.

@metaskills
Owner

Crap, a mistake on my part, I meant config/initializers/mongrel.rb.

Also, do not require the file, rails requires init file automatically.

@vivek-dhayalan

thanks, it worked.

@rca

Thanks for the fix. I've put together a patched gist that fixes the issues in the comments below that works for Rails versions ['2.3.8', '2.3.9', '2.3.10', '2.3.11']:

https://gist.github.com/826692

Thanks.

@bauerpl

Thanks a lot!

@tf
tf commented Jun 27, 2011

Solved the problem for me on 2.3.12

Thanks a lot!

@edusilva

im using rails 2.3.10 placed file in config/initializers/mongrel.rb and include version 2.3.10, but still having error:
undefined method `[]' for nil:NilClass

Application trace:

E:/webSAS/webSAS/vendor/plugins/recode_legacy_database/lib/recode_legacy_database.rb:36:in after_initialize'
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.10/lib/active_record/callbacks.rb:347:in
send'
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.10/lib/active_record/callbacks.rb:347:in callback'
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:1691:in
send'
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:1691:in instantiate'
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:665:in
find_by_sql'
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:665:in collect!'
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:665:in
find_by_sql'
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:1582:in find_every'
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:1539:in
find_initial'
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:617:in find'
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:1914:in
find_by_login'
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:1919:in send'
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.10/lib/active_record/base.rb:1919:in
method_missing_without_paginate'
E:/webSAS/webSAS/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:164:in method_missing'
E:/webSAS/webSAS/app/models/user.rb:76:in
authenticate'
E:/webSAS/webSAS/app/controllers/sessions_controller.rb:9:in `create'

Can anyone help?

Thanks in advance
Eduardo

@stangel

Eduardo, what does E:/webSAS/webSAS/vendor/plugins/recode_legacy_database/lib/recode_legacy_database.rb line 36 look like?

@edusilva

is a plugin that work with encoding utf-8 to iso, its useful for use rails with sqlserver old versions. it converts caracters encoding when saving and loading data from database to ensure that special caracters will be displayed correctly.

@edusilva

fixed problem removing recode_legacy_database, but now trying to solve utf-8 x sqlserver encoding problem

thnks for the tip

@Jampire

thanks a lot. Working for rails 2.3.14 too.

@tyleramos

Worked for me in 2.3.14 as well. Thanks so much!

@vgaicuks

Thanks a lot! Worked for me in 2.3.15.

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