Problem sending files > ~10KB using Active Resource

Hey everybody,

scenario: frontend-server gets files from a form.file_field and should
send the filedata to a backend-server via (Hyper)ActiveResource!

I used the following code to access a method in a backend-server and
send the filedata:

CampaignTopic.post(:icon_attachments_rebuild_and_save, :filedata =>
params[:campaign_topic][:icon_brand].read, :content_type => params
[:campaign_topic][:icon_brand].content_typ )

This works fine for files less than ~10KB, otherwise a get a
Errno::ECONNRESET
An existing connection was forcibly closed by the remote host.

Application Trace:
D:/dev/rubyonrails/ruby/lib/ruby/1.8/net/protocol.rb:175:in `write'
D:/dev/rubyonrails/ruby/lib/ruby/1.8/net/protocol.rb:175:in `write0'
D:/dev/rubyonrails/ruby/lib/ruby/1.8/net/protocol.rb:151:in `write'
D:/dev/rubyonrails/ruby/lib/ruby/1.8/net/protocol.rb:166:in `writing'
D:/dev/rubyonrails/ruby/lib/ruby/1.8/net/protocol.rb:150:in `write'
D:/dev/rubyonrails/ruby/lib/ruby/1.8/net/http.rb:1583:in
`write_header'
D:/dev/rubyonrails/ruby/lib/ruby/1.8/net/http.rb:1548:in
`send_request_with_body'
D:/dev/rubyonrails/ruby/lib/ruby/1.8/net/http.rb:1534:in `exec'
D:/dev/rubyonrails/ruby/lib/ruby/1.8/net/http.rb:1057:in `request'
D:/dev/rubyonrails/ruby/lib/ruby/1.8/net/http.rb:1046:in `request'
D:/dev/rubyonrails/ruby/lib/ruby/1.8/net/http.rb:547:in `start'
D:/dev/rubyonrails/ruby/lib/ruby/1.8/net/http.rb:1044:in `request'
D:/dev/rubyonrails/ruby/lib/ruby/1.8/net/http.rb:854:in `post'
D:/dev/rubyonrails/ruby/lib/ruby/gems/1.8/gems/activeresource-2.3.2/
lib/active_resource/connection.rb:149:in `send'
D:/dev/rubyonrails/ruby/lib/ruby/gems/1.8/gems/activeresource-2.3.2/
lib/active_resource/connection.rb:149:in `request'
D:/dev/rubyonrails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/
active_support/core_ext/benchmark.rb:17:in `ms'
D:/dev/rubyonrails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/
active_support/core_ext/benchmark.rb:10:in `realtime'
D:/dev/rubyonrails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/
active_support/core_ext/benchmark.rb:17:in `ms'
D:/dev/rubyonrails/ruby/lib/ruby/gems/1.8/gems/activeresource-2.3.2/
lib/active_resource/connection.rb:149:in `request'
D:/dev/rubyonrails/ruby/lib/ruby/gems/1.8/gems/activeresource-2.3.2/
lib/active_resource/connection.rb:134:in `post'
D:/dev/rubyonrails/ruby/lib/ruby/gems/1.8/gems/activeresource-2.3.2/
lib/active_resource/custom_methods.rb:61:in `post'
D:/.../.../../.../.../../internal/trunk/app/controllers/
campaign_topics_controller.rb:92:in `create'

The Point is, that the request doesn't contact the backend-method, so
it's the code posted above which causes the connection to be closed.
Has anyone any idea what the problem might be?

thanks for help ...

What web server and how are you serving rails?

I have a caching media server built in rails and I ran into a couple
problems that look identical to this. First I was on Apache2 with
Ruby Enterprise Edition and Passenger Phusion using MySQL as the
database.

In my case I needed to do two things. First give passenger phusion a
LimitRequestBody value. I set this pretty high, well over 100MB
(LimitRequestBody 104857600). You can just paste that into your
virtual host config file for this site. Second I had to tell MySQL
to use a larger maximum packet size. max_allowed_packet = 100M in the
[mysqld] section of my.cnf.

I am no expert when it comes to how MySQL does its network connections
and am not sure if the whole max packet thing should match the
LimitRequestBody or not. I figured that the file and data being sent
to MySQL was going to be smaller than the request that passenger
handles so a little extra on the LimitRequestBody wouldn't hurt.

After upgrading passenger to the latest version my Errno::ECONNRESET
errors went away.