-
-
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 |
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)
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)
the same with Rails 2.3.10
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.
Vivek a couple suggestions:
- If you're using Rails 3 then alias_method_chain is deprecated, but you shouldn't need this patch on Rails 3.
- If you're on a Mac you might try this: http://john.vipvip.com/blog/?p=71
I am using rails 2.3.8 only. But still I am facing this problem.
@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
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.
Crap, a mistake on my part, I meant config/initializers/mongrel.rb.
Also, do not require the file, rails requires init file automatically.
thanks, it worked.
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.
Thanks a lot!
Solved the problem for me on 2.3.12
Thanks a lot!
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
Eduardo, what does E:/webSAS/webSAS/vendor/plugins/recode_legacy_database/lib/recode_legacy_database.rb line 36 look like?
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.
fixed problem removing recode_legacy_database, but now trying to solve utf-8 x sqlserver encoding problem
thnks for the tip
thanks a lot. Working for rails 2.3.14 too.
Worked for me in 2.3.14 as well. Thanks so much!
Thanks a lot! Worked for me in 2.3.15.
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.