Strange NoMethodError

Hi,
In the following test script (similar to pickaxe p. 700 ):

require 'net/http'
require 'uri'

def fetch (uri_str, limit=10)
     fail 'http redirect limit exceeded' if limit.zero?
     response = Net::HTTP.get_response(URI.parse(uri_str))
     case response
     when Net::HTTPSuccess
       response
     when Net::HTTPRedirection
       fetch(response['location'], limit-1)
     else
       response.error!
     end
end

fetch('heise.de');

with
ruby test.rb
I get the result:

Exception `NoMethodError' at /usr/local/lib/ruby/1.8/net/http.rb:380 - undefined method `request_uri' for #<URI::Generic:0x188f84 URL:heise.de>
/usr/local/lib/ruby/1.8/net/http.rb:380:in `get_response': undefined method `request_uri' for #<URI::Generic:0x188f84 URL:heise.de> (NoMethodError)
         from /usr/local/lib/ruby/1.8/net/http.rb:545:in `start'
         from /usr/local/lib/ruby/1.8/net/http.rb:379:in `get_response'
         from test.rb:6:in `fetch'
         from test.rb:18

I had a look at /usr/local/lib/ruby/1.8/uri/http.rb
The function was defined there:

···

#
     # == Description
     #
     # Returns: path + '?' + query
     #
     def request_uri
       r = path_query
       if r[0] != ?/
         r = '/' + r
       end

       r
     end

It should be a function of the standard libray. I am quite new to ruby. How can I debug this problem? Or any hints what I can do?

Thanks in advance for your help,

Holger

^^^^^^^^
          ^^^^^^^^

this is not a uri.

try

   harp:~ > ruby -r uri -e' p URI.parse("heise.de").host '
   nil

   harp:~ > ruby -r uri -e' p URI.parse("http://heise.de").host '
   "heise.de"

regards.

-a

···

On Mon, 7 Aug 2006, Holger Biebinger wrote:

Hi,
In the following test script (similar to pickaxe p. 700 ):

require 'net/http'
require 'uri'

def fetch (uri_str, limit=10)
   fail 'http redirect limit exceeded' if limit.zero?
   response = Net::HTTP.get_response(URI.parse(uri_str))
   case response
   when Net::HTTPSuccess
     response
   when Net::HTTPRedirection
     fetch(response['location'], limit-1)
   else
     response.error!
   end
end

fetch('heise.de');

--
happiness is not something ready-made. it comes from your own actions.
- h.h. the 14th dali lama

Oh my god ... thank you vey much. You are right. I was a it confused because of the NoMethodError and I thought I had installed something wrongly. Thanks for your hint :slight_smile:

best regards,
Holger

···

On Aug 7, 2006, at 5:02 PM, ara.t.howard@noaa.gov wrote:

On Mon, 7 Aug 2006, Holger Biebinger wrote:

Hi,
In the following test script (similar to pickaxe p. 700 ):

require 'net/http'
require 'uri'

def fetch (uri_str, limit=10)
   fail 'http redirect limit exceeded' if limit.zero?
   response = Net::HTTP.get_response(URI.parse(uri_str))
   case response
   when Net::HTTPSuccess
     response
   when Net::HTTPRedirection
     fetch(response['location'], limit-1)
   else
     response.error!
   end
end

fetch('heise.de');

         ^^^^^^^^

this is not a uri.

try

  harp:~ > ruby -r uri -e' p URI.parse("heise.de").host '
  nil

  harp:~ > ruby -r uri -e' p URI.parse("http://heise.de").host '
  "heise.de"

regards.

-a