JS embed falla con "Excepción de trabajo: longitudes de bloque almacenadas no válidas (Zlib::DataError)"

Hola, no podemos hacer que el JS embed funcione en nuestra configuración. He leído todos los demás temas similares y he logrado que este embedding funcione en un proyecto totalmente diferente en el pasado. Este parece ser algo diferente…

En el sitio externo, solo se ve nuestro logo seguido de “cargando discusión…”

En Discourse, no se crean temas, incluso si el registro de errores muestra que las solicitudes están llegando.

Hemos revisado las URL. También hemos probado a añadir una URL estática (en lugar de una variable). Nada.

El registro de errores de Discourse tiene este Error:

Job exception: invalid stored block lengths (Zlib::DataError)  
excon-0.88.0/lib/excon/middlewares/decompress.rb:23:in `inflate'

excon-0.88.0/lib/excon/middlewares/decompress.rb:23:in `response_call'

excon-0.88.0/lib/excon/middlewares/base.rb:26:in `response_call'

excon-0.88.0/lib/excon/middlewares/instrumentor.rb:44:in `response_call'

excon-0.88.0/lib/excon/middlewares/base.rb:26:in `response_call'

excon-0.88.0/lib/excon/middlewares/expects.rb:20:in `response_call'

excon-0.88.0/lib/excon/middlewares/response_parser.rb:12:in `response_call'

excon-0.88.0/lib/excon/connection.rb:451:in `response'

excon-0.88.0/lib/excon/connection.rb:282:in `request'

excon-0.88.0/lib/excon.rb:250:in `get'

/var/www/discourse/lib/final_destination.rb:206:in `public_send'

/var/www/discourse/lib/final_destination.rb:206:in `resolve'

/var/www/discourse/app/models/topic_embed.rb:120:in `find_remote'

/var/www/discourse/app/models/topic_embed.rb:192:in `import_remote'

/var/www/discourse/lib/topic_retriever.rb:52:in `fetch_http'

/var/www/discourse/lib/topic_retriever.rb:39:in `perform_retrieve'

/var/www/discourse/lib/topic_retriever.rb:12:in `retrieve'

/var/www/discourse/app/jobs/regular/retrieve_topic.rb:15:in `execute'

/var/www/discourse/app/jobs/base.rb:232:in `block (2 levels) in perform'

rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:80:in `with_connection'

/var/www/discourse/app/jobs/base.rb:221:in `block in perform'

/var/www/discourse/app/jobs/base.rb:217:in `each'

/var/www/discourse/app/jobs/base.rb:217:in `perform'

sidekiq-6.3.1/lib/sidekiq/processor.rb:196:in `execute_job'

sidekiq-6.3.1/lib/sidekiq/processor.rb:164:in `block (2 levels) in process'

sidekiq-6.3.1/lib/sidekiq/middleware/chain.rb:138:in `block in invoke'

/var/www/discourse/lib/sidekiq/pausable.rb:138:in `call'

sidekiq-6.3.1/lib/sidekiq/middleware/chain.rb:140:in `block in invoke'

sidekiq-6.3.1/lib/sidekiq/middleware/chain.rb:143:in `invoke'

sidekiq-6.3.1/lib/sidekiq/processor.rb:163:in `block in process'

sidekiq-6.3.1/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'

sidekiq-6.3.1/lib/sidekiq/job_retry.rb:112:in `local'

sidekiq-6.3.1/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'

sidekiq-6.3.1/lib/sidekiq.rb:39:in `block in <module:Sidekiq>'

sidekiq-6.3.1/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'

sidekiq-6.3.1/lib/sidekiq/processor.rb:257:in `stats'

sidekiq-6.3.1/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'

sidekiq-6.3.1/lib/sidekiq/job_logger.rb:13:in `call'

sidekiq-6.3.1/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'

sidekiq-6.3.1/lib/sidekiq/job_retry.rb:79:in `global'

sidekiq-6.3.1/lib/sidekiq/processor.rb:124:in `block in dispatch'

sidekiq-6.3.1/lib/sidekiq/logger.rb:11:in `with'

sidekiq-6.3.1/lib/sidekiq/job_logger.rb:33:in `prepare'

sidekiq-6.3.1/lib/sidekiq/processor.rb:123:in `dispatch'

sidekiq-6.3.1/lib/sidekiq/processor.rb:162:in `process'

sidekiq-6.3.1/lib/sidekiq/processor.rb:78:in `process_one'

sidekiq-6.3.1/lib/sidekiq/processor.rb:68:in `run'

sidekiq-6.3.1/lib/sidekiq/util.rb:43:in `watchdog'

sidekiq-6.3.1/lib/sidekiq/util.rb:52:in `block in safe_thread'

Buscar este mensaje de error no trae nada aquí, ni en… ¿el resto de Internet?

¿Alguna pista?

2 Me gusta

Parece un error relacionado con la compresión de la página. ¿Puedes compartir un enlace a la página que intentas incrustar?

3 Me gusta

¡Gracias por revisar esto!

Esta es la página externa: Bitwig Preset: Phase-3 | Bitwiggers

Y esta es la categoría donde deberían aparecer los temas: Bitwiggers.com - Bitwish

(Hemos eliminado la plantilla después de las pruebas fallidas).

¿Ayuda este comentario? (esto está fuera de mi liga tecnológica):

Las respuestas son exitosas 200, y basándonos en esa discusión, parece que está fallando al manejar esa respuesta al extraer datos de Bitwiggers, y está fallando específicamente al intentar manejar la compresión.

Basándonos en inflate, parece que negoció usar el esquema de compresión deflate, mientras que creo que la preferida sería gzip. Las solicitudes de Firefox indican que manejaría ambos, pero el servidor decide gzip en ese caso.

2 Me gusta

Parece que si envío una solicitud a su servidor web como

curl 'https://bitwiggers.com/presets/d1a7c2c7-848d-425c-9058-993317cbcc9c/' -H 'accept-encoding: deflate, gzip' -vv

Recibo una respuesta comprimida deflate, donde la mayoría de los servidores web, dadas las dos opciones, preferirían usar gzip. Eso es extraño.

Veo que puedo reproducir fácilmente este error con

require 'excon'
response = Excon.get('https://bitwiggers.com/presets/d1a7c2c7-848d-425c-9058-993317cbcc9c/',
 headers: {'accept-encoding' => 'deflate, gzip'})

# falla, por defecto en excon
Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(response.body)

# funciona
Zlib::Inflate.new(0).inflate(response.body)

Este código tiene más de 8 años en Excon, así que supongo que su servidor web tiene la culpa, pero de todos modos lo reporté upstream

3 Me gusta

Interesante, y gracias por reportar el error. Suscrito.

Intentando resumir nuestros pensamientos:

No tenemos control sobre ese manejo, pero no creemos que sea el servidor web. ¿Qué pasa con la construcción de las cabeceras en su lugar? Si se pasa como gzip, deflate, entonces la respuesta debería ser comprimida con gzip. Según las especificaciones HTTP, el cliente debe presentar las opciones, ponderadas o no, en orden según su preferencia. Así que si la solicitud prefiere deflate sobre gzip, entonces recibe un deflate. ¿No está entonces el problema en el código/solicitud, porque recibió una codificación que solicitó y no pudo manejarla?

¿Quizás el problema está relacionado con esto?

Hay una “fusión” y lo que parece ser una expectativa de gzip.

El administrador del otro servidor está investigando cómo se puede forzar gzip en su extremo. Aún así, sería interesante conocer sus pensamientos al respecto.

(Como referencia, el servidor es AWS API Gateway; no es algo que podamos controlar, aparte de habilitar/deshabilitar la compresión).

2 Me gusta

El desarrollador ha respondido: Excon fails to inflate specific page · Issue #768 · excon/excon · GitHub

2 Me gusta

¿Podrían ayudar a traducir la respuesta del desarrollador de Excon? No estoy seguro de dónde está el problema y quién podría solucionarlo.

También me pregunto si podríamos aplicar un parche local a nuestro Discourse para eludir este problema de gzip/deflate. Los parches locales son dolorosos, pero es aún más doloroso tener una integración de dos sitios con cientos de páginas que se incrustan con discusiones de Discourse pendientes debido a este problema.

1 me gusta

¡El mantenedor de Excon ha confirmado un parche que en teoría soluciona este problema! :tada: Pronto saldrá una nueva versión de Excon, dice.

2 Me gusta

Y ahora el mantenedor de Excon ha publicado una nueva versión de la biblioteca que incluye este parche. :tada:

¿Significa esto que podemos actualizar nuestra instancia de inmediato, o Discourse utiliza su propio repositorio provisional para estas bibliotecas? Recordando la salida de las actualizaciones de Discourse, creo que se extraen directamente de los repositorios originales, pero preferiría preguntar antes de tocar nuestro backend. :slight_smile:

1 me gusta

Decidí preguntar directamente a Discourse :slight_smile: actualizando y revisando los registros. Después de ver esto

Instalando excon 0.89.0
www/discourse/vendor/bundle/ruby/2.7.0/specifications/excon-0.89.0.gemspec

lo hemos intentado de nuevo y ¡AHORA LA INCORPORACIÓN FUNCIONA!

Muchas gracias @Falco por tu informe upstream. Tenías toda la razón, y añadí algo de ruido que quizás no fue tan útil. Mis disculpas, y gracias de nuevo.

4 Me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.