"EOFError: end of file reached" on HEROKU when sending UTF-8 over SSL

I have a strange mistake in heroics. To play it, I have to make a large (more than a few kilobytes) POST HTTPS with any UTF-8 characters in the request body. Here is an example:

require "net/https" require "uri" #Accutally I've ecountered this bug while posting to another server url = URI.parse("https://api.heroku.com/myapps") #It Ukrainian 'oiced velar plosive G' letter payload = "า‘"*10000 request = Net::HTTP::Post.new(url.path) request.body = payload http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.read_timeout = 500 http.start {|http| http.request request } 

Running such a script on the local irb machine gives me:

 #<Net::HTTPUnauthorized 401 Unauthorized readbody=true> 

... which is expected, but for the cedar hero, launching it on the "console hero" ... in about 60 seconds I get:

 EOFError: end of file reached from /usr/local/lib/ruby/1.9.1/openssl/buffering.rb:145:in `sysread_nonblock' from /usr/local/lib/ruby/1.9.1/openssl/buffering.rb:145:in `read_nonblock' from /usr/local/lib/ruby/1.9.1/net/protocol.rb:135:in `rbuf_fill' from /usr/local/lib/ruby/1.9.1/net/protocol.rb:116:in `readuntil' from /usr/local/lib/ruby/1.9.1/net/protocol.rb:126:in `readline' from /usr/local/lib/ruby/1.9.1/net/http.rb:2219:in `read_status_line' from /usr/local/lib/ruby/1.9.1/net/http.rb:2208:in `read_new' from /usr/local/lib/ruby/1.9.1/net/http.rb:1191:in `transport_request' from /usr/local/lib/ruby/1.9.1/net/http.rb:1177:in `request' from (irb):32:in `block in irb_binding' from /usr/local/lib/ruby/1.9.1/net/http.rb:627:in `start' from (irb):32 from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.7/lib/rails/commands/console.rb:47:in `start' from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.7/lib/rails/commands/console.rb:8:in `start' from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.7/lib/rails/commands.rb:41:in `<top (required)>' 

What should I do with this?

+8
ruby ruby-on-rails ruby-on-rails-3 heroku
source share
2 answers

I had to add a ruby โ€‹โ€‹version to Gemfile , by default Cedar ruby โ€‹โ€‹is 1.9.2 (which has an error passing UTF-8 strings over SSL)

 source 'https://rubygems.org' ruby "1.9.3" gem 'rails', '3.2.7' gem 'pg' ... 
+3
source share

I think this should work:

 require "net/https" require "uri" url = URI.parse("https://api.heroku.com/myapps") #It Ukrainian letter 'soft-G' payload = "า‘"*10000 request = Net::HTTP::Post.new(url.path) request.basic_auth 'youremail', 'yourpassword' request.body = URI.encode(payload) http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.read_timeout = 500 http.start {|http| http.request request } 
+2
source share

All Articles