2011-02-18 11 views
7

estoy tratando de ejecutar el siguiente fragmento de un nuevo proyecto de carriles de la marca en la consola:rieles y OpenURI

uri = URI.parse("http://25.media.tumblr.com/avatar_279ec8ee3427_64.png") 
data = open(uri) 

Este errores con:

TypeError: can't convert URI::HTTP into String 
    from (irb):24:in `open' 
    from (irb):24 
    from /Users/kevin/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/commands/console.rb:44:in `start' 
    from /Users/kevin/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/commands/console.rb:8:in `start' 
    from /Users/kevin/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/commands.rb:23:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 

estoy móviles sobre raíles 3.0 .4 y Ruby 1.9.2. ¿Alguna idea sobre cómo solucionar este problema? ¡Gracias!

+0

Probablemente deberías agregar '.read' a tu' abrir', así: 'data = open ('http://www.example.com/') .read' de lo contrario tendrás una Manejar IO listo para leer, pero sin contenido. –

Respuesta

9

open-uri quiere una cadena.

data = open("http://25.media.tumblr.com/avatar_279ec8ee3427_64.png") 
+2

Si solo usa 'abrir' no ha recibido ningún contenido, solo ha creado un manejador de archivo:' data.class # => Tempfile'. Tienes que "leer" el identificador del archivo para recibir realmente algo. –

29

open() aceptará tanto una cadena y un objeto URI.

io = open("http://...") 
io = open(URI.parse("http://...")) 

El error que ha descrito que sucederá si open-uri no está incluido.

require 'open-uri'