Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

245
Vistas
La excepción Ruby NoMethodError llama a #inspect por defecto

Encontré un problema extraño en Ruby y no estoy muy seguro de si es un problema o es una función introducida en versiones recientes de Ruby.

Básicamente, cuando llamamos a un método indefinido, obtenemos un error de undefined method como se esperaba en Ruby. El problema es que también llama a inspect e imprime el objeto y todos sus atributos/valores. Si mi objeto es complejo, lleva mucho tiempo terminar de imprimir todo y, en muchas ocasiones, hace que mi servidor de rieles local se cuelgue, especialmente cuando hay un atributo que contiene datos binarios. Este problema no parece ocurrir con Ruby 2.6 pero con Ruby >= 2.7.

Para objetos simples, eso no es un problema, pero tengo un problema específico con esta gema: puppeteer-ruby . Cada objeto de esta gema tiene muchos atributos y dependencias.

Aquí hay un ejemplo, ejecuto el siguiente código en IRB con una versión diferente de Ruby y obtengo diferentes excepciones:

 require 'puppeteer-ruby' browser = Puppeteer.launch(headless: true) browser.foo

Rubí 2.6.6

 NoMethodError: undefined method `foo' for #<Puppeteer::Browser:0x00007fce2d553b30> Did you mean? for

Rubí 3.0.0

 (irb):9:in `<main>': undefined method `foo' for #<Puppeteer::Browser:0x00007f9300550740 @ignore_https_errors=false, @default_viewport=#<Puppeteer::Viewport:0x00007f92ffbf8e90 @width=800, @height=600, @device_scale_factor=1.0, @is_mobile=false, @has_touch=false, @is_landscape=false>, @process=#<Puppeteer::BrowserRunner::BrowserProcess:0x00007f92fc5ae448 @spawnargs=["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", "--disable-background-networking", "--enable-features=NetworkService,NetworkServiceInProcess", "--disable-background-timer-throttling", "--disable-backgrounding-occluded-windows", "--disable-breakpad", "--disable-client-side-phishing-detection", "--disable-component-extensions-with-background-pages", "--disable-default-apps", "--disable-dev-shm-usage", "--disable-extensions", "--disable-features=Translate", "--disable-hang-monitor", "--disable-ipc-flooding-protection", "--disable-popup-blocking", "--disable-prompt-on-repost", "--disable-renderer-backgrounding", "--disable-sync", "--force-color-profile=srgb", "--metrics-recording-only", "--no-first-run", "--enable-automation", "--password-store=basic", "--use-mock-keychain", "--enable-blink-features=IdleDetection", "--headless", "--hide-scrollbars", "--mute-audio", "about:blank", "--remote-debugging-port=0", "--user-data-dir=/var/folders/qn/kx4kb8xx5x13gx77yy2q56fr0000gn/T/puppeteer_dev_chrome_profile-20210910-25051-m7mnxb"], @stdout=#<IO:fd 24>, @stderr=#<IO:fd 26>,......very long text after this..
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Eso es interesante: inspect siempre ha impreso variables internas.

En la culpa, el último cambio para inspect fue hace 9 años: rb_object_inspect#704

Un script simple usando 2.6:

 > docker run -it ruby:2.6.6-alpine sh #> ruby -v ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux-musl] #> irb irb(main):001:0> class Foo; def initialize(message); @message = message; end; end => :initialize irb(main):002:0> Foo.new('hello').foo NoMethodError (undefined method `foo' for #<Foo:0x00007f35e20e0280 @message="hello">) Did you mean? for

Aunque mirando la fuente de Puppeteer::Browser , parece que cambiaron a una implementación de rubí puro del navegador hace unos 2 años. Cuando lo hicieron, introdujeron muchos ivars a la clase. ¿Quizás la versión que está usando cambió entre la actualización de Ruby de 2.6 a 3.0?

Una solución simple sería inspect el parche de mono en Puppeteer::Browser , o enviar un PR al mantenedor; parece que el proyecto está activo en GitHub.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda