From 3754822f43f2942f32f14ea326c9a7b2f344d056 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 20 Sep 2005 10:53:33 +0000 Subject: [PATCH] Fixed problem with send_file and WEBrick using stdout #1812 git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2274 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_controller/cgi_process.rb | 2 +- actionpack/lib/action_controller/streaming.rb | 8 ++++---- actionpack/test/controller/send_file_test.rb | 15 +++++---------- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/actionpack/lib/action_controller/cgi_process.rb b/actionpack/lib/action_controller/cgi_process.rb index 8c472c5514..4413a29791 100644 --- a/actionpack/lib/action_controller/cgi_process.rb +++ b/actionpack/lib/action_controller/cgi_process.rb @@ -145,7 +145,7 @@ module ActionController #:nodoc: if @cgi.send(:env_table)['REQUEST_METHOD'] == 'HEAD' return elsif @body.respond_to?(:call) - @body.call(self) + @body.call(self, output) else output.write(@body) end diff --git a/actionpack/lib/action_controller/streaming.rb b/actionpack/lib/action_controller/streaming.rb index 2914fd907b..0280522e13 100644 --- a/actionpack/lib/action_controller/streaming.rb +++ b/actionpack/lib/action_controller/streaming.rb @@ -61,20 +61,20 @@ module ActionController #:nodoc: @performed_render = false if options[:stream] - render :text => Proc.new { + render :text => Proc.new { |response, output| logger.info "Streaming file #{path}" unless logger.nil? len = options[:buffer_size] || 4096 File.open(path, 'rb') do |file| - if $stdout.respond_to?(:syswrite) + if output.respond_to?(:syswrite) begin while true - $stdout.syswrite file.sysread(len) + output.syswrite(file.sysread(len)) end rescue EOFError end else while buf = file.read(len) - $stdout.write buf + output.write(buf) end end end diff --git a/actionpack/test/controller/send_file_test.rb b/actionpack/test/controller/send_file_test.rb index b7674bda60..0a1cc256d2 100644 --- a/actionpack/test/controller/send_file_test.rb +++ b/actionpack/test/controller/send_file_test.rb @@ -47,16 +47,11 @@ class SendFileTest < Test::Unit::TestCase assert_not_nil response assert_kind_of Proc, response.body - old_stdout = $stdout - begin - require 'stringio' - $stdout = StringIO.new - $stdout.binmode - assert_nothing_raised { response.body.call } - assert_equal file_data, $stdout.string - ensure - $stdout = old_stdout - end + require 'stringio' + output = StringIO.new + output.binmode + assert_nothing_raised { response.body.call(response, output) } + assert_equal file_data, output.string end def test_data