Skip to content

Instantly share code, notes, and snippets.

@metaskills
Created July 11, 2010 16:42
Show Gist options
  • Save metaskills/471663 to your computer and use it in GitHub Desktop.
Save metaskills/471663 to your computer and use it in GitHub Desktop.
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
@edusilva
Copy link

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:insend'
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:insend'
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:infind_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:infind_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:infind_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:infind_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:inmethod_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:inauthenticate'
E:/webSAS/webSAS/app/controllers/sessions_controller.rb:9:in `create'

Can anyone help?

Thanks in advance
Eduardo

@stangel
Copy link

stangel commented Aug 26, 2011

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

@edusilva
Copy link

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
Copy link

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

thnks for the tip

@Jampire
Copy link

Jampire commented Dec 6, 2011

thanks a lot. Working for rails 2.3.14 too.

@tyleramos
Copy link

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

@vgaicuks
Copy link

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