Strange NoMethodError

  • Thread starter Holger Biebinger
  • Start date
H

Holger Biebinger

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
 
A

ara.t.howard

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
 
H

Holger Biebinger

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

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 :)

best regards,
Holger
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,764
Messages
2,569,567
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top