Skip to content

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
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

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
Something went wrong with that request. Please try again.