mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Temporarily ship with ContentLength middleware.
This commit is contained in:
parent
19ee8413de
commit
5eadb4d73d
7 changed files with 47 additions and 15 deletions
1
Gemfile
1
Gemfile
|
@ -11,7 +11,6 @@ end
|
||||||
gem "coffee-script"
|
gem "coffee-script"
|
||||||
gem "sass"
|
gem "sass"
|
||||||
gem "uglifier", :git => "git://github.com/lautis/uglifier.git"
|
gem "uglifier", :git => "git://github.com/lautis/uglifier.git"
|
||||||
gem "rack", :git => "git://github.com/rack/rack.git"
|
|
||||||
|
|
||||||
gem "rake", ">= 0.8.7"
|
gem "rake", ">= 0.8.7"
|
||||||
gem "mocha", ">= 0.9.8"
|
gem "mocha", ">= 0.9.8"
|
||||||
|
|
|
@ -22,7 +22,7 @@ Gem::Specification.new do |s|
|
||||||
s.add_dependency('rack-cache', '~> 1.0.1')
|
s.add_dependency('rack-cache', '~> 1.0.1')
|
||||||
s.add_dependency('builder', '~> 3.0.0')
|
s.add_dependency('builder', '~> 3.0.0')
|
||||||
s.add_dependency('i18n', '~> 0.6.0beta1')
|
s.add_dependency('i18n', '~> 0.6.0beta1')
|
||||||
s.add_dependency('rack', '~> 1.3.0.beta')
|
s.add_dependency('rack', '~> 1.3.0.beta2')
|
||||||
s.add_dependency('rack-test', '~> 0.6.0')
|
s.add_dependency('rack-test', '~> 0.6.0')
|
||||||
s.add_dependency('rack-mount', '~> 0.8.1')
|
s.add_dependency('rack-mount', '~> 0.8.1')
|
||||||
s.add_dependency('sprockets', '~> 2.0.0.beta.5')
|
s.add_dependency('sprockets', '~> 2.0.0.beta.5')
|
||||||
|
|
|
@ -141,7 +141,7 @@ module Rails
|
||||||
|
|
||||||
def default_middleware_stack
|
def default_middleware_stack
|
||||||
ActionDispatch::MiddlewareStack.new.tap do |middleware|
|
ActionDispatch::MiddlewareStack.new.tap do |middleware|
|
||||||
middleware.use ::Rack::ContentLength, config.action_dispatch.x_sendfile_header
|
middleware.use ::Rails::Rack::ContentLength, config.action_dispatch.x_sendfile_header
|
||||||
|
|
||||||
if rack_cache = config.action_controller.perform_caching && config.action_dispatch.rack_cache
|
if rack_cache = config.action_controller.perform_caching && config.action_dispatch.rack_cache
|
||||||
require "action_dispatch/http/rack_cache"
|
require "action_dispatch/http/rack_cache"
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
module Rails
|
module Rails
|
||||||
module Rack
|
module Rack
|
||||||
autoload :Debugger, "rails/rack/debugger"
|
autoload :ContentLength, "rails/rack/content_length"
|
||||||
autoload :Logger, "rails/rack/logger"
|
autoload :Debugger, "rails/rack/debugger"
|
||||||
autoload :LogTailer, "rails/rack/log_tailer"
|
autoload :Logger, "rails/rack/logger"
|
||||||
autoload :Static, "rails/rack/static"
|
autoload :LogTailer, "rails/rack/log_tailer"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
38
railties/lib/rails/rack/content_length.rb
Normal file
38
railties/lib/rails/rack/content_length.rb
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
require 'action_dispatch'
|
||||||
|
require 'rack/utils'
|
||||||
|
|
||||||
|
module Rails
|
||||||
|
module Rack
|
||||||
|
# Sets the Content-Length header on responses with fixed-length bodies.
|
||||||
|
class ContentLength
|
||||||
|
include ::Rack::Utils
|
||||||
|
|
||||||
|
def initialize(app, sendfile=nil)
|
||||||
|
@app = app
|
||||||
|
@sendfile = sendfile
|
||||||
|
end
|
||||||
|
|
||||||
|
def call(env)
|
||||||
|
status, headers, body = @app.call(env)
|
||||||
|
headers = HeaderHash.new(headers)
|
||||||
|
|
||||||
|
if !STATUS_WITH_NO_ENTITY_BODY.include?(status.to_i) &&
|
||||||
|
!headers['Content-Length'] &&
|
||||||
|
!headers['Transfer-Encoding'] &&
|
||||||
|
!(@sendfile && headers[@sendfile])
|
||||||
|
|
||||||
|
old_body = body
|
||||||
|
body, length = [], 0
|
||||||
|
old_body.each do |part|
|
||||||
|
body << part
|
||||||
|
length += bytesize(part)
|
||||||
|
end
|
||||||
|
old_body.close if old_body.respond_to?(:close)
|
||||||
|
headers['Content-Length'] = length.to_s
|
||||||
|
end
|
||||||
|
|
||||||
|
[status, headers, body]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,5 +0,0 @@
|
||||||
require 'action_dispatch'
|
|
||||||
|
|
||||||
module Rails::Rack
|
|
||||||
Static = ActiveSupport::Deprecation::DeprecatedConstantProxy.new('Rails::Rack::Static', ActionDispatch::Static)
|
|
||||||
end
|
|
|
@ -19,7 +19,7 @@ module ApplicationTests
|
||||||
boot!
|
boot!
|
||||||
|
|
||||||
assert_equal [
|
assert_equal [
|
||||||
"Rack::ContentLength",
|
"Rails::Rack::ContentLength",
|
||||||
"ActionDispatch::Static",
|
"ActionDispatch::Static",
|
||||||
"Rack::Lock",
|
"Rack::Lock",
|
||||||
"ActiveSupport::Cache::Strategy::LocalCache",
|
"ActiveSupport::Cache::Strategy::LocalCache",
|
||||||
|
@ -104,7 +104,7 @@ module ApplicationTests
|
||||||
end
|
end
|
||||||
|
|
||||||
test "insert middleware after" do
|
test "insert middleware after" do
|
||||||
add_to_config "config.middleware.insert_after Rack::ContentLength, Rack::Config"
|
add_to_config "config.middleware.insert_after Rails::Rack::ContentLength, Rack::Config"
|
||||||
boot!
|
boot!
|
||||||
assert_equal "Rack::Config", middleware.second
|
assert_equal "Rack::Config", middleware.second
|
||||||
end
|
end
|
||||||
|
@ -127,7 +127,7 @@ module ApplicationTests
|
||||||
end
|
end
|
||||||
|
|
||||||
test "insert middleware before" do
|
test "insert middleware before" do
|
||||||
add_to_config "config.middleware.insert_before Rack::ContentLength, Rack::Config"
|
add_to_config "config.middleware.insert_before Rails::Rack::ContentLength, Rack::Config"
|
||||||
boot!
|
boot!
|
||||||
assert_equal "Rack::Config", middleware.first
|
assert_equal "Rack::Config", middleware.first
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue