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 |
This comment has been minimized.
This comment has been minimized.
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 comment has been minimized.
This comment has been minimized.
This seems to also be a problem in Rails 2.3.9 so I changed the first line to: |
This comment has been minimized.
This comment has been minimized.
the same with Rails 2.3.10 |
This comment has been minimized.
This comment has been minimized.
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. |
This comment has been minimized.
This comment has been minimized.
Vivek a couple suggestions:
|
This comment has been minimized.
This comment has been minimized.
I am using rails 2.3.8 only. But still I am facing this problem. |
This comment has been minimized.
This comment has been minimized.
@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 |
This comment has been minimized.
This comment has been minimized.
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') but, I am getting the same error again. |
This comment has been minimized.
This comment has been minimized.
Crap, a mistake on my part, I meant config/initializers/mongrel.rb. Also, do not require the file, rails requires init file automatically. |
This comment has been minimized.
This comment has been minimized.
thanks, it worked. |
This comment has been minimized.
This comment has been minimized.
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. |
This comment has been minimized.
This comment has been minimized.
Thanks a lot! |
This comment has been minimized.
This comment has been minimized.
Solved the problem for me on 2.3.12 Thanks a lot! |
This comment has been minimized.
This comment has been minimized.
im using rails 2.3.10 placed file in config/initializers/mongrel.rb and include version 2.3.10, but still having error: Application trace: E:/webSAS/webSAS/vendor/plugins/recode_legacy_database/lib/recode_legacy_database.rb:36:in Can anyone help? Thanks in advance |
This comment has been minimized.
This comment has been minimized.
Eduardo, what does E:/webSAS/webSAS/vendor/plugins/recode_legacy_database/lib/recode_legacy_database.rb line 36 look like? |
This comment has been minimized.
This comment has been minimized.
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. |
This comment has been minimized.
This comment has been minimized.
fixed problem removing recode_legacy_database, but now trying to solve utf-8 x sqlserver encoding problem thnks for the tip |
This comment has been minimized.
This comment has been minimized.
thanks a lot. Working for rails 2.3.14 too. |
This comment has been minimized.
This comment has been minimized.
Worked for me in 2.3.14 as well. Thanks so much! |
This comment has been minimized.
This comment has been minimized.
Thanks a lot! Worked for me in 2.3.15. |
This comment has been minimized.
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.