فشل تضمين JS مع "Job exception: invalid stored block lengths (Zlib::DataError)"

مرحباً، لا يمكننا تشغيل تضمين JS في إعداداتنا. لقد قرأت جميع المواضيع المشابهة الأخرى وتمكنت من تشغيل هذا التضمين في مشروع مختلف تمامًا في الماضي. يبدو هذا مختلفًا…

على الموقع الخارجي، يظهر شعارنا فقط متبوعًا بـ “جارٍ تحميل المناقشة…”

على Discourse، لا يتم إنشاء أي مواضيع، حتى لو أظهر سجل الأخطاء أن الطلبات قادمة.

لقد راجعنا عناوين URL. لقد اختبرنا أيضًا إضافة عنوان URL ثابت (بدلاً من متغير). لا شيء.

يحتوي سجل أخطاء Discourse على هذا الخطأ:

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'

البحث عن رسالة الخطأ هذه لا يأتي بشيء هنا، ولا على… بقية الإنترنت؟

أي تلميحات؟

إعجابَين (2)

يبدو أنه خطأ متعلق بضغط الصفحة؟ هل يمكنك مشاركة رابط للصفحة التي تحاول تضمينها؟

3 إعجابات

شكرا لك على النظر في هذا!

هذه هي الصفحة الخارجية: Bitwig Preset: Phase-3 | Bitwiggers

وهذه هي الفئة التي يجب أن تظهر فيها المواضيع: Bitwiggers.com - Bitwish

(لقد أزلنا القالب بعد الاختبارات الفاشلة.)

هل يساعد هذا التعليق؟ (هذا خارج نطاق خبرتي التقنية):

الاستجابات ناجحة 200s، وبناءً على تلك المناقشة يبدو أنها تفشل في التعامل مع هذه الاستجابة أثناء كشط Bitwiggers، وهي تفشل تحديدًا عند محاولة التعامل مع الضغط.

بناءً على inflate، يبدو أنها تفاوضت على استخدام مخطط ضغط deflate، بينما أعتقد أن المفضل سيكون gzip. تشير طلبات Firefox إلى أنها ستتعامل مع كليهما، لكن الخادم يقرر gzip في هذه الحالة.

إعجابَين (2)

يبدو أنه إذا أرسلت طلبًا إلى خادم الويب الخاص بك كما يلي:

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

أتلقى استجابة مضغوطة بـ deflate، حيث تفضل معظم خوادم الويب عند إعطائها الخيارين استخدام gzip. هذا غريب.

أرى أنه يمكنني تكرار هذا الخطأ بسهولة باستخدام:

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

# يفشل، افتراضي في excon
Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(response.body)

# يعمل
Zlib::Inflate.new(0).inflate(response.body)

هذا الكود قديم بأكثر من 8 سنوات في Excon، لذلك أخمن أن خادم الويب الخاص بك هو المخطئ هنا، لكنني أبلغت به إلى المنبع على أي حال.

3 إعجابات

مثير للاهتمام، وشكراً لك على تقديم هذا الخطأ. تم الاشتراك.

محاولة لتلخيص أفكارنا:

ليس لدينا سيطرة على هذه المعالجة، لكننا لا نعتقد أنها مشكلة خادم الويب. ماذا عن بناء الرؤوس بدلاً من ذلك؟ إذا تم تمريرها كـ gzip, deflate، فيجب ضغط الاستجابة. وفقًا لمواصفات HTTP، يجب على العميل تقديم الخيارات، مرجحة أو غير مرجحة، بالترتيب حسب تفضيله. لذا، إذا كان الطلب يفضل “deflate” على “gzip”، فسيحصل على “deflate”. أليس إذن المشكلة في الكود/الطلب، لأنه تلقى ترميزًا طلبه وفشل في معالجته؟

ربما المشكلة مرتبطة بهذا؟

هناك “دمج” وما يبدو أنه توقع لـ gzip؟

مسؤول الخادم الآخر يبحث في كيفية فرض gzip من جانبه. ومع ذلك، سيكون من المثير للاهتمام معرفة أفكارك حول هذا الأمر.

(للمرجع، الخادم هو AWS API Gateway؛ ليس شيئًا نتحكم فيه، بخلاف تمكين/تعطيل الضغط.)

إعجابَين (2)

استجاب المطور: Excon fails to inflate specific page · Issue #768 · excon/excon · GitHub

إعجابَين (2)

هل يمكن لأحد المساعدة في ترجمة رد مطور Excon؟ لست متأكدًا من المشكلة ومن يمكنه إصلاحها.

أتساءل أيضًا عما إذا كان بإمكاننا تطبيق تصحيح محلي على Discourse الخاص بنا لتجاوز مشكلة gzip/deflate هذه. التصحيحات المحلية مؤلمة، ولكن من المؤلم أكثر أن يكون لدينا تكامل لموقعين بمئات الصفحات ليتم تضمينهما مع مناقشات Discourse معلقة بسبب هذه المشكلة.

إعجاب واحد (1)

لقد قام مسؤول صيانة Excon بتثبيت تصحيح يحل هذه المشكلة من الناحية النظرية! :tada: يقول إن إصدار Excon جديدًا يجب أن يأتي قريبًا.

إعجابَين (2)

والآن قام مسؤول صيانة Excon بنشر إصدار جديد للمكتبة يتضمن هذه الرقعة. :tada:

هل هذا يعني أنه يمكننا تحديث نسختنا على الفور، أم أن Discourse تستخدم مستودعًا مرحليًا خاصًا بها لهذه المكتبات؟ أتذكر مخرجات ترقيات Discourse وأعتقد أنها تُسحب مباشرة من المستودعات الأصلية، لكنني أفضل أن أسأل قبل لمس الواجهة الخلفية لدينا. :slight_smile:

إعجاب واحد (1)

قررت أن أسأل Discourse مباشرة :slight_smile: عن طريق الترقية وفحص السجلات. بعد رؤية هذا

تثبيت excon 0.89.0
www/discourse/vendor/bundle/ruby/2.7.0/specifications/excon-0.89.0.gemspec

حاولنا مرة أخرى والآن يعمل التضمين!

شكراً جزيلاً لك @Falco على تقريرك، لقد كنت على حق تماماً، وأضفت بعض الضوضاء التي ربما لم تكن مفيدة جداً. أعتذر، وشكراً لك مرة أخرى.

4 إعجابات

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