Problem with Ruby 1.9, HTTPS and OpenSSL

Hi

I have a strange problem with my Ruby installation.

First:

  • I use RVM, and I tried to compile Ruby with my system version of
    openssl (and libs), and with the package version included in RVM. Both
    fail
  • I have never had an error during compilation/installation, always at
    runtime
  • I don’t use a firewall and the page is displayed fine in my browser
  • with my system install of Ruby (1.8.7) I don’t have this problem…

I use this simple script


require ‘net/http’
require ‘net/https’
require ‘uri’

url = URI.parse(‘https://www.google.com’)
res = Net::HTTP.start(url.host, url.port) { |http|
http.get(’/’)
}
puts res.body


and I get

~/.rvm/rubies/ruby-1.9.2-preview1/lib/ruby/1.9.1/net/protocol.rb:
135:in read_nonblock': end of file reached (EOFError) from /~/.rvm/rubies/ruby-1.9.2-preview1/lib/ruby/1.9.1/net/ protocol.rb:135:inrbuf_fill’
from /~/.rvm/rubies/ruby-1.9.2-preview1/lib/ruby/1.9.1/net/
protocol.rb:116:in readuntil' from /~/.rvm/rubies/ruby-1.9.2-preview1/lib/ruby/1.9.1/net/ protocol.rb:126:inreadline’
from /~/.rvm/rubies/ruby-1.9.2-preview1/lib/ruby/1.9.1/net/
http.rb:2138:in read_status_line' from /~/.rvm/rubies/ruby-1.9.2-preview1/lib/ruby/1.9.1/net/ http.rb:2127:inread_new’
from /~/.rvm/rubies/ruby-1.9.2-preview1/lib/ruby/1.9.1/net/
http.rb:1120:in transport_request' from /~/.rvm/rubies/ruby-1.9.2-preview1/lib/ruby/1.9.1/net/ http.rb:1106:inrequest’
from /~/.rvm/rubies/ruby-1.9.2-preview1/lib/ruby/1.9.1/net/
http.rb:817:in get' from testhttp.rb:6:inblock in ’
from /~/.rvm/rubies/ruby-1.9.2-preview1/lib/ruby/1.9.1/net/
http.rb:564:in start' from /~/.rvm/rubies/ruby-1.9.2-preview1/lib/ruby/1.9.1/net/ http.rb:453:instart’
from testhttp.rb:6:in `’

What do you think is the source of the problem?

2010/5/26 Dagnan [email protected]:

  • with my system install of Ruby (1.8.7) I don’t have this problem…

Strange. Ruby 1.8.7p248 raises EOFError on my environment.

% ruby-1.8.7p248 -ve "
require ‘net/http’
require ‘net/https’
require ‘uri’

url = URI.parse(‘https://www.google.com’)
res = Net::HTTP.start(url.host, url.port) { |http|
http.get(’/’)
}
"
ruby 1.8.7 (2009-12-24 patchlevel 248) [i686-linux]
/home/ruby/187p248/lib/ruby/1.8/net/protocol.rb:135:in sysread': end of file reached (EOFError) from /home/ruby/187p248/lib/ruby/1.8/net/protocol.rb:135:inrbuf_fill’
from /home/ruby/187p248/lib/ruby/1.8/timeout.rb:62:in timeout' from /home/ruby/187p248/lib/ruby/1.8/timeout.rb:93:intimeout’
from /home/ruby/187p248/lib/ruby/1.8/net/protocol.rb:134:in
rbuf_fill' from /home/ruby/187p248/lib/ruby/1.8/net/protocol.rb:116:inreaduntil’
from /home/ruby/187p248/lib/ruby/1.8/net/protocol.rb:126:in
readline' from /home/ruby/187p248/lib/ruby/1.8/net/http.rb:2024:inread_status_line’
from /home/ruby/187p248/lib/ruby/1.8/net/http.rb:2013:in
read_new' from /home/ruby/187p248/lib/ruby/1.8/net/http.rb:1050:inrequest’
from /home/ruby/187p248/lib/ruby/1.8/net/http.rb:772:in get' from -e:8 from /home/ruby/187p248/lib/ruby/1.8/net/http.rb:543:instart’
from /home/ruby/187p248/lib/ruby/1.8/net/http.rb:440:in `start’
from -e:7

On May 25, 6:06 pm, Tanaka A. [email protected] wrote:

    from /home/ruby/187p248/lib/ruby/1.8/timeout.rb:93:in `timeout'
    from /home/ruby/187p248/lib/ruby/1.8/net/http.rb:440:in `start'
    from -e:7


Tanaka A.

My mistake. It fails everywhere, because with net/https we have to
specify to use ssl.

My problem is actually in net-http-persistent module, I try to
reproduce it but it succeeds manually…

So this topic is no longer useful.

On May 25, 2010, at 09:30, Dagnan wrote:

require ‘uri’
from /home/ruby/187p248/lib/ruby/1.8/timeout.rb:62:in timeout' from /home/ruby/187p248/lib/ruby/1.8/net/http.rb:543:instart’

So this topic is no longer useful.

There was a bug in net-http-persistent. Upgrade to net-http-persistent
1.2.1